5

Rails 2.3.5を使用していますが、これが私がしたことです。最新のキュウリ、キュウリレール、カピバラがインストールされています。

rails demo
cd demo
ruby script/generate cucumber --rspec --capybara
ruby script/generate feature post title:string body:text published:boolean
ruby script/generate scaffold post title:string body:text published:boolean
rake db:migrate
rake cucumber

すべてのテストに合格しています。次に、Javascript を使用してテストしたいと思います。

今回のシナリオはこんな感じ

  Scenario: Delete post
    Given the following posts:
      |title|body|published|
      |title 1|body 1|false|
      |title 2|body 2|true|
      |title 3|body 3|false|
      |title 4|body 4|true|
    When I delete the 3rd post
    Then I should see the following posts:
      |Title|Body|Published|
      |title 1|body 1|false|
      |title 2|body 2|true|
      |title 4|body 4|true|

先頭に @javascript を追加しました。

rake cucumber を実行すると、確認ページが表示されます。しかし、クリックするまで何も起こりません。

[OK] が自動的にクリックされてテストが続行されるようにするには、どうすればよいですか。

4

3 に答える 3

8

一種のハックですが、今のところ唯一の方法だと思います。

When /^I confirm a js popup on the next step$/ do
  page.evaluate_script("window.alert = function(msg) { return true; }")
  page.evaluate_script("window.confirm = function(msg) { return true; }")
end

このステップは、確認ポップアップをトリガーするステップの直前に配置する必要があります (リンクをたどります)。これは、標準のアラートと確認動作を変更して、常に true を返すようにします。したがって、「OK」ボタンを自分でクリックする必要はありません。

于 2010-05-30T20:14:18.807 に答える
2

Tobias のソリューションのバリエーションを実装しました。

のような手順が欲しかったWhen I follow the "Delete" link for customer "Alice Angry"ので、次のようにしました。

When /^(.*) and (?:|I )click "OK"$/ do |step|
  click_ok_after { When step }
end

module JavascriptHelpers
  def click_ok_after
    begin
      page.evaluate_script("window.alert = function(msg) { return true; }")
      page.evaluate_script("window.confirm = function(msg) { return true; }")
    rescue Capybara::NotSupportedByDriverError
      # do nothing: we're not testing javascript
    ensure
      yield
    end
  end
end
World(JavascriptHelpers)

完全な説明は、私がここに書いたブログ投稿にあります。

于 2011-07-10T20:30:16.690 に答える
0

スティーブンの解決策に感謝します。読みやすくするために修正した方法を次に示します。

When /^I follow "([^"]*)" and click OK$/ do |text|
  page.evaluate_script("window.alert = function(msg) { return true; }")
  page.evaluate_script("window.confirm = function(msg) { return true; }")
  When %{I follow "#{text}"}
end
于 2010-11-05T05:42:40.937 に答える