2012-07-31 85 views
3

我是一個試圖學習的rails/rspec newb。我設置了以下數據模型(節選)Rspec NoMethodError:undefined方法`呼叫',但一切通過軌道控制檯工作

t.string :foo 
t.string :bar 
t.date :future_date 

,我有一個網絡表單創建與用戶,類似於此的rails tutorial相關的微柱這些條目。網頁表單看起來像這樣(摘錄):

<%= f.label :foo %> 
<%= f.text_field :foo %> 
<%= f.label :bar %> 
<%= f.text_field :bar %> 
<%= f.date_select :future_date %> 

帶有按鈕「創建」,啓動帖子。一切似乎通過軌道控制檯正常工作; Web表單顯示正確,條目正確創建,數據庫正確填充。然而,當我運行RSpec的我得到

NoMethodError: 
    undefined method `call' for #<RSpec::Expectations::ExpectationTarget:0x0000000492b7c0> 

下面是相關要求規範(節選):

it "should not create a foobar" do 
    expect { click_button "Create" }.should_not change(Foobar, :count) 
end 

換句話說,點擊無信息填寫在「創建」我有一個類似稍後用信息填充的示例,但幾乎相同的click_button也會引發此錯誤(應該更改.by(1))。我有類似的click_button測試對於用戶創建部分(沒有任何東西/輸入)工作正常,除了future_date之外,它非常相似。那加上我在我無休止的谷歌搜索中遇到的一些事情,讓我相信這個日期是某種程度上的責任,也許是版本或者其他方面的不一致。特別是因爲在實際使用中一切正常。這是與紅寶石1.9.3,Rails 3.2.6和Rspec 2.11.1。任何見解都非常感謝。

+1

嘗試'期待{click_button 「創建」} .to_not變化(Foobar的,:計數)' – 2012-07-31 06:32:32

+0

這做到了。我回到我的其他點擊按鈕的例子,他們也有.to和not。應該。捂臉。謝謝。 – nighliber 2012-07-31 15:33:40

+0

真棒。 – 2012-07-31 18:52:24

回答

10

在RSpec的> = 2.11,你應該使用to方法,而不是should

expect { click_button "Create" }.to_not change(Foobar, :count) 
2

應該說...

it "should not create a foobar" do 
    lambda { click_button "Create" }.should_not change(Foobar, :count) 
end 

...所以lambda,不expect

+0

正如我寫的這不起作用,但我查了一下,並做了「lambda do/click_button」創建「/ end.should_not變化(Foobar,:計數)」,這工作。 – nighliber 2012-07-31 15:34:00

+0

花括號應該是一樣的,所以不知道他們爲什麼沒有。也許在開幕之前不應該有空格'{'或什麼的?稍後當我在我的工作站時,我會試着檢查一下。 – 2012-08-01 00:10:39

+0

我同意,但我之前遇到過這個問題。版本差異可能?或者,也許問題只是我。 – nighliber 2012-08-07 21:22:07