2010-03-19 91 views
1

我在嘗試爲黃瓜鐵軌模型定義一個模擬方面遇到了很多麻煩。這似乎是方法創造了一堆的消息的期望,我不斷收到錯誤,像這樣的:在黃瓜+鐵軌上嘲笑問題

Given I have only a product named "Sushi de Pato" # features/step_definitions/product_ 
steps.rb:19 
     unexpected invocation: #<Mock:ProductCategory_1001>.__mock_proxy() 
     unsatisfied expectations: 
     - expected exactly once, not yet invoked: #<Mock:ProductCategory_1001>.errors(any_pa 
rameters) 
     - expected exactly once, not yet invoked: #<Mock:ProductCategory_1001>.id(any_parame 
ters) 
     - expected exactly once, not yet invoked: #<Mock:ProductCategory_1001>.to_param(any_ 
parameters) 
     - expected exactly once, not yet invoked: #<Mock:ProductCategory_1001>.new_record?(a 
ny_parameters) 
     - expected exactly once, not yet invoked: #<Mock:ProductCategory_1001>.destroyed?(an 
y_parameters) 
     satisfied expectations: 
     - allowed any number of times, not yet invoked: #<Mock:errors>.count(any_parameters) 

     (Mocha::ExpectationError) 

我還沒有實現的產品分類的類,我只是希望它返回一個ID和一個「名稱」屬性。

這是我的步驟定義:

Given /^I have only a product named "([^\"]*)"$/ do |name| 
    @product = Product.create!(:name => name, :description => 'Foo', :price => 100, :points => 100, :category => mock_model(ProductCategory)) 
end 

這是我env.rb文件:

$: << File.join(File.dirname(__FILE__),"..") 

require 'spec\spec_helper 

我使用RSPEC 1.3.0,0.6.3黃瓜和webrat 0.7.0

我試着使用存根很好,但有一些其他的錯誤,而不是...

回答

1

這真的不是REC推薦在黃瓜模擬模型。黃瓜旨在成爲一個完整的堆棧,外部測試框架。

如果您還沒有實現ProductCategory類,我建議從產品中刪除類別關聯,並測試您實現的功能。

當您開始實施ProductCategory時,您可以試着通過它來測試驅動器。

+0

我認爲你是絕對正確的!在閱讀了很多關於黃瓜試圖解決這個問題的東西之後,我得出了這樣一個結論,即黃瓜應該更多地作爲一個集成測試,因此需要我描述的每個東西都要實施。我通過創建ProductCategory模型規範然後實現它來解決它。我認爲這是有道理的,因爲Product和ProductCategory緊密相關。 非常感謝你! – 2010-03-20 20:51:40

0

我認爲jrallison回答了這個問題,但無論如何,如果你覺得像在黃瓜上模擬模型來實現諸如外部連接或日期/時間操縱之類的行爲,你可以使用下面的答案, cukes討論列表:

下面是我在做什麼env.rb: 要求 「投機/嘲笑」

Before do 
# To get RSpec stubs and mocks working. 
$rspec_mocks ||= Spec::Mocks::Space.new 
end 

After do 
    begin 
    $rspec_mocks.verify_all 
    ensure 
    $rspec_mocks.reset_all 
    end 
end 

祝你好運!

1

就我而言,這是因爲我激活了另一個嘲笑框架,我忘記了這一點。我在規格/ spec_helper.rb固定它比線再次評論:

# == Mock Framework 
    # 
    # RSpec uses its own mocking framework by default. If you prefer to 
    # use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    # config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 

這樣的RSpec將使用自己的模擬框架