0

私はきゅうりにかなり慣れていません。ユーザーが重複するタグを作成しないことを確認するためのテストを作成しようとしています。したがって、次のように読み取る機能を作成しました。

Scenario: Analyst adds a duplicate privacy tag
  Given I have a privacy tag called "Green"
  When I try to create a tag called "Green"
  Then I should be on the new privacy tag page
  And I should see an error message for "Green"

私のステップは次のように定義されています。

Given /^I have a privacy tag called "(.*?)"$/ do |tag|
    PrivacyTag.create(:content => tag)
end

When /^I try to create a tag called "(.*?)"$/ do |arg1|
    visit new_privacy_tag_path
    fill_in 'privacy_tag[content]', :with => arg1
    click_button 'Create'
end

Then /^I should be on the new privacy tag page$/ do
    new_privacy_tag_path
end

Then /^I should see an error message for "(.*?)"$/ do |arg1|
    page.should have_selector('div', :class => 'alert alert-error') do |flash|
        flash.should have_content fartknocker
    end
end

奇妙なことに、これらのテストはすべて現在合格しています。アプリケーションで許可されている重複したプライバシータグを作成しようとして、プライバシータグのインデックスページが表示された場合、ユーザーはnew_privacy_tag_pathに戻りません。しかし、テストはまだ合格です。そして、Cucumberは、fartknockerと呼ばれる変数がどこにも定義されておらず、fartknockerという単語がページのどこにも表示されていないという事実にさえ目を光らせません。テストはまだ合格です。何が得られますか?

4

2 に答える 2

0

それpage.should have_selectorはブロックを取らないからです。あなたがおそらく探しているのはwithin方法です:

page.within('div', :class => 'alert alert-error') do
    page.should have_content fartknocker
end

編集:あなたのコードでは、行flash.should have_content fartknockerは決して実行されないブロック内にあるので、Rubyはそれを評価しないので、欠落している変数について文句を言う機会はありません。

于 2012-08-29T17:38:27.980 に答える
0
Then /^I should be on the new privacy tag page$/ do
  new_privacy_tag_path
end

それは何も主張しません。したがって、常に緑色になります。

Then /^I should see an error message for "(.*?)"$/ do |arg1|
  page.should have_selector('div', :class => 'alert alert-error') do |flash|
    flash.should have_content fartknocker
  end
end

have_contentまた、それ/matches/に対して注意する必要があります"equals"。そして、Jon M が彼の回答で言及したことは、対処する必要があるものです。

于 2012-08-29T19:52:21.103 に答える