我是一个试图学习的rails / rspec newb。我已经设置了以下数据模型(摘录)
t.string :foo
t.string :bar
t.date :future_date
我有一个Web表单来创建与用户关联的条目,类似于此rails tutorial中的微博。 Web表单看起来像这样(摘录):
<%= f.label :foo %>
<%= f.text_field :foo %>
<%= f.label :bar %>
<%= f.text_field :bar %>
<%= f.date_select :future_date %>
使用“创建”按钮启动帖子。一切似乎通过rails控制台正常工作;正确显示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,非常相似。那,加上我在无休止的谷歌搜索中遇到的东西,让我相信日期是某种程度上的责任,也许是版本或其他东西的不一致。特别是因为在实际使用中一切都很好。这是ruby 1.9.3,Rails 3.2.6和Rspec 2.11.1。非常感谢任何见解。
答案 0 :(得分:10)
在RSpec&gt; = 2.11中,您应该使用to
方法而不是should
expect { click_button "Create" }.to_not change(Foobar, :count)
答案 1 :(得分:2)
应该说......
it "should not create a foobar" do
lambda { click_button "Create" }.should_not change(Foobar, :count)
end
...所以lambda
,而不是expect
。