私は次の仕様を持っています:
it "deletes post", :js => true do
...
...
page.status_code.should = '404'
end
page.status_code
行でこのエラーが発生しています:
Capybara::NotSupportedByDriverError
ページのステータスコードを確認するにはどうすればよいですか。
status_code
は現在Seleniumドライバーでサポートされていません。応答ステータスコードを確認するには、別のテストを作成する必要があります。
余談として。この線
page.status_code.should = '404'
する必要があります
page.status_code.should == 404
これはcapybara-webkitで私のために働いた。
そのテストのために別のドライバー(rack-test
など)に切り替えるか、表示されたページが404ページであることをテストします(h1にコンテンツ「Not Found」が含まれている必要があります)。
@eugenが言ったように、Seleniumはステータスコードをサポートしていません。
Selenium Webドライバーはstatus_codeを実装せず、Selenium(開発者の選択)でresponse_codeをテストする直接的な方法はありません。
それをテストするには、layout/application.html.erbに追加しました。
<html code="<%= response.try(:code) if defined?(response) %>">[...]</html>
そして、私のテストでは:
def no_error?
response_code = page.first('html')[:code]
assert (response_code == '200'), "Response code should be 200 : got #{response_code}"
end
やってみよう
expect(page).to have_http_status(200)
Jsを使用してリクエストを作成し、以下のようにステータスを取得します。
js_script = <<JSS
xhr = new XMLHttpRequest();
xhr.open('GET', '#{src}', true);
xhr.send();
JSS
actual.execute_script(js_script)
status = actual.evaluate_script('xhr.status') # get js variable value
詳細は https://Gist.github.com/yovasx2/1c767114f2e003474a546c89ab4f90db を確認してください