2009-10-02 71 views
0

以下是该应用/模型/ websites.rb摩卡+黄瓜嘲笑净响应

class Masterpiece < ActiveRecord::Base 
    validates_presence_of :title, :link 
    validates_uri_existence_of :link, :allow_redirect => false 
end 

第二验证是从插件Validates Existence of URI插件

以下为特征/支持/ mocha.rb文件

require 'mocha' 
World(Mocha::API) 

Before do 
    mocha_setup 
    @http_mock = mock('Net::HTTPResponse') 
    @http_mock.stubs(:code => '200', :message => "OK", :content_type => "text/html", :body => '<title>Test</title><body>Body of the page</body>') 
    Net::HTTP.expects(:get_response).returns(@http_mock) 
    #Website.expects(:validates_uri_existence_of).returns(true) 
end 

After do 
    begin 
    mocha_verify 
    ensure 
    mocha_teardown 
    end 
end 

但是当我尝试运行黄瓜功能,它会尝试创建记录和保存上述插件之前会尝试检查过氖t得到回应。没关系。
但是,当我想要得到它嘲笑的测试环境中,我试图用摩卡。

我应如何编写代码来嘲笑净响应或类方法validates_uri_existence_of流畅运行测试?

回答

2

的模拟需求是正确的类。尝试:

Net::HTTP.expects(:get_response).returns(Net::HTTPSuccess.allocate) 

Class#allocate实例化一个类没有调用初始化)

+0

好吧,我改变了支持/ mocha.rb文件作为你建议。 之前做 mocha_setup 网:: HTTP.expects(:get_response).returns(净:: HTTPSuccess.allocate) 结束 但现在当我运行的特点,显示下面的错误! 不是所有的期望都满足 不满意的期望: - 预计只有一次,没有调用:净:: HTTP.get_response(any_parameters) (摩卡:: ExpectationError) – Autodidact 2009-10-03 07:51:16

+0

不知道为什么它不会被调用。如果它的目的是无法一直叫你应该使用'stubs'而不是预期(同样的工作,不会导致不触发时失效)。 听起来像Fakeweb foo(@Radar提到的)是一个更好的解决方案。嘲讽低水平几乎总是会引起头痛。 – cwninja 2009-10-03 19:00:19

+0

谢谢。我现在通过在代码末尾添加.at_most(4)来解决它,并且它工作正常。但是我仍然不满意这个解决方案。在进入摩卡之前,我查看了FakeWeb,但没有找到代替摩卡的代码行。你可以给我这行代码,使这个工作使用FakeWeb? – Autodidact 2009-10-07 15:11:39

2

我推荐使用Fakeweb这一点,因为它是非常适合的。

+0

+1。我试图记住这是我的答案。 – cwninja 2009-10-03 19:01:12