2009-10-02 91 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