3

私はRails/rspecの初心者です。次のデータモデルを設定しました(抜粋)

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

このRailsチュートリアルのマイクロポストと同様に、ユーザーに関連付けられたこれらのエントリを作成するためのWebフォームがあります。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)を変更する必要があります)。私は、future_dateを除いて、非常によく似ているユーザー作成部分(何も入力されていない/何かが入力されている)に対して同様のclick_buttonテストが正常に機能しています。それに加えて、私が無限のグーグルで遭遇した何かは、日付が何らかの理由で、おそらくバージョンの不一致か何かのせいであると私に信じさせます。特に実際の使用ではすべてが正常に機能しているためです。これは、ruby 1.9.3、Rails 3.2.6、およびRspec2.11.1で使用されます。どんな洞察も大歓迎です。

4

2 に答える 2

10

RSpec >= 2.11toでは、代わりにメソッドを使用する必要がありますshould

expect { click_button "Create" }.to_not change(Foobar, :count)
于 2012-07-31T18:51:37.163 に答える
2

それは言うべきです...

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

・・・そうlambdaではありませんexpect

于 2012-07-31T06:36:50.030 に答える