1

予定を予約するためのページがあり、予定が利用可能な最も早い日時を選択する JavaScript コードが含まれています。その後、ユーザーはボタンをクリックして予定をスケジュールできます。

それをテストするために、次のようなrspecテストを書いていました。

book_appointment_spec.rb

context "when on the profile page" do 
  before do 
    click_linkedin_button
  end

  it 'book an appointment', :js => true do 
    click_link "new-appointment"
    choose "doctor1"
    click_button "Submit and Schedule"
    expect(page).to have_content "Congrats!"
  end
end

click_linkedin_button は、linkedin oauth を介してユーザーをログインさせるだけのメソッド定義です。問題は、設定した後でも、ブロックの周りに :js => true を設定するたびに、リンクされたhttp://imgur.com/mYUOxgDOmniAuth.config.mock_auth[:linkedin]経由でログインするように求められることです。

誰かがこの問題を解決する方法を知っているかどうか疑問に思っていました。

以下は、この問題に関連する可能性のあるその他のファイルです。

spec_helper.rb

require 'capybara/webkit/matchers'
Capybara.javascript_driver = :webkit

Gemfile

gem 'capybara-webkit'
gem 'database_cleaner'
gem 'capybara'
4

3 に答える 3

3

お気づきのように、あるドライバーを使用してテストの一部を実行し、別のドライバーを使用してテストの一部を実行することはできません。これは、

Given I login in using Safari.
Then I should be logged in using Firefox.

したがって、解決策は、テスト環境で js ログイン コードを実行してログインする必要があるということです。これは実際には良いことです (js ログイン コードをテストしたい場合)。リンクインに実際に接続することを避けたい場合は、このテストを実行するたびに、リンクインへの接続をモックする必要があります。VCR ( https://github.com/vcr/vcr ) を見てください。これにより、リンクインへの接続を記録できるため、その後のテスト実行でリンクインに移動する必要がなくなります。

于 2015-01-09T00:14:17.440 に答える
1

js: truerspec ブロックでの設定は、例全体で JavaScript 対応のドライバーを使用するためのショートカットです。したがって、このドライバーは、すべての実行中、またはすべての前/後/前後のブロックを含むサンプル中に使用され、使用されます。

これを回避するには、 を使用する代わりに、js: true必要なサンプルのポイントで使用するドライバーを手動で設定できます。

it {
  do_some_stuff_with_default_driver

  Capybara.current_driver = :webkit
  do_some_stuff_with_webkit

  Capybara.current_driver = :selenium
  do_some_stuff_with_selenium
}

編集

おっと、これを読んだばかりなので、おそらくその解決策は機能しないでしょう。私にお知らせください

注: ドライバーを切り替えると新しいセッションが作成されるため、テストの途中で切り替えることができない場合があります。

于 2015-01-07T06:47:03.467 に答える