2016-04-25 9 views
0

Capybara-webkitを使用して問題が発生しました。ページ内の記号が表示されるはずです。このような単純なサンプルコードは失敗:URLルートでCapybara-webkitが予期せぬ動作をすると、空白のページが返される

Failure/Error: expect(page).to have_text 'Sign in' 
    expected to find text "Sign in" in "" 

save_and_open_pageが空<body></body>と空白のページが表示されます。

feature 'user signs in' do 
    scenario 'sign in successfully', js: true do 
    user = create(:user) 

    visit new_user_session_url 
    expect(page).to have_text 'Sign in' 
    end 
end 

それは失敗メッセージを与えます。 js: trueが削除された場合、すべて正常に動作します。

この仕様では、jsを設定する必要はありません。しかし、javascriptに依存する仕様も失敗します。これは単なるサンプル仕様です。

Capybara-webkitがこのように動作する理由を説明してくれる人はいますか?それは正常ですか、問題ですか、私が正しく設定していないものがありますか?

[注] このアプリケーションではサブドメインが使用されています。 Capybara-webkitがサブドメインでうまく機能しないことがありますか?

+0

new_user_session_urlは何を返すのですか? –

+0

'http:// www.example.com/users/sign_in' –

答えて

0

テスト環境(通常はtest.rb)でconfig.action_controller.default_url_optionsを設定しましたか?そこに指定されたホストは、URLヘルパーによってURLの作成に使用され、capybaraがテストアプリを実行しているホスト名(通常は127.0.0.1)にする必要があります。これは、new_user_session_urlあなたのテストコードに戻ります。

+0

' config.action_controller.default_url_options'が設定されていません。また、 'new_user_session_url'の値が有効です。これは 'example.com'をホスト名として使用します。私はアプリがサブドメインに大きく依存していることを示すために質問を更新します。 –

+0

あなたはnew_user_session_pathで正しく動作すると言いますが、new_user_session_urlで失敗します。唯一の違いは、xxx_urlにはURLにホスト名と(おそらくはポート番号が含まれています) - ポート番号を確認するために 'Capybara.always_include_port = true'あなたが訪問しようとしているURLのテストアプリケーションが調整されていますか? –

+0

驚いたことに、xxx_pathも失敗しました。そして、ええ、私は 'Capybara.always_include_port'を' true'に設定しました。今、私はこれをデバッグするために調べるべきところを理解していません:( –

0

問題は自分の間違いから来ました。私のコントローラでは、を使用してrequest.urlに付属するサブドメインを調べています。これはurlhostの前に存在するサブドメインの配列を返します。

私のテストでは、ActionDispatch::Requestを受け入れて:subdomainsメソッドを受け入れ、指定されたサブドメインで応答します。その後、コントローラで検証を続行できます。

私はその場でルートURLでsubdomain属性を設定する場所があるので、私は中1を設定する前にrequest.subdomain(URL内の新しい1セット)とrequest.subdomains異なる値(古いものを持っていましたURL)。だから、私は新しいものと一緒に行くことに決めました。そしてそれは.split('.')と分けています。それが私と一緒に作業する必要があるからです。

変更後、仕様のスタブを更新してリクエストメソッドをsubdomainに変更するのを忘れていました。

変更後、すべて正常に動作します。

これは、この同じ問題に直面している人に役立つことを願っています。少なくともスタブがあれば更新するように通知します。

[更新] 明らかに、2つのサブドメインメソッドの値が異なる理由は、仕様のスタブのためです。

関連する問題