1

以下は問題なく動作します。

Then /^I should see a button called "([^\"]*)"$/ do |name|
  response.should have_selector("li") do |li|
    li.should have_selector("a") do |a|
      a.should contain(name)
    end
  end
end

次に、次のような手順でそれを補完する必要があります。

Then /^I should not see a button called "([^\"]*)"$/ do |name|
   [snip...]
end

標準的な「And I should not see」は満足のいくものではありません。ボタン内だけでなく、ページ内の任意の場所でターゲット フレーズをピックアップしてしまうからです。特に、ターゲット テキストのボタンが存在しないことを確認する必要があります。

私の最初の本能は、次のようなことを試すことでした:

Then /^I should see a button called "([^\"]*)"$/ do |name|
  response.should have_selector("li") do |li|
    li.should have_selector("a") do |a|
      a.should_not contain(name)
    end
  end
end

しかしもちろん、ターゲット テキストを含むボタンが 1 つ以上ある場合でも、ターゲット テキストを含まないボタンがページにある限り、これは成功します。

あなたの考え?

どうもありがとう、

スティーブン。

4

3 に答える 3

2

使用できますassert_not_contain(おそらく、 rdocnot_containにないので疑わしいです)。

a.should assert_not_contain(name)
于 2009-10-27T11:15:20.513 に答える
1

問題が解決しました!すべてのコントロールに「コントロール」のクラスを与え、次のステップ定義を書きました。

Then /^I should not see a control called "([^\"]*)"$/ do |name|
  response.should have_selector("a.control", :content => name, :count
=> 0)
end

もちろん、これは私が彼ら全員に「コントロール」のクラスを与えて満足していることを前提としています...

秒。

于 2009-10-29T12:22:57.323 に答える
0

あなたのボタンは実際にリンクですか?ボタン (submit 値がある場合) には、次を使用します。

assert_have_selector "input[type=submit][value=\"#{text}\"]"

と:

assert_have_no_selector "input[type=submit][value=\"#{text}\"]"

h番目。

于 2009-10-27T11:50:15.050 に答える