web-dev-qa-db-ja.com

Capybara + Seleniumで応答コードをテストする方法

私は次の仕様を持っています:

it "deletes post", :js => true do 
...
...
page.status_code.should = '404'

end 

page.status_code行でこのエラーが発生しています:

Capybara::NotSupportedByDriverError

ページのステータスコードを確認するにはどうすればよいですか。

30
deb

status_codeは現在Seleniumドライバーでサポートされていません。応答ステータスコードを確認するには、別のテストを作成する必要があります。

18
eugen

余談として。この線

page.status_code.should = '404'

する必要があります

page.status_code.should == 404

これはcapybara-webkitで私のために働いた。

44
Apie

そのテストのために別のドライバー(rack-testなど)に切り替えるか、表示されたページが404ページであることをテストします(h1にコンテンツ「Not Found」が含まれている必要があります)。

@eugenが言ったように、Seleniumはステータスコードをサポートしていません。

3
Leonid Shevtsov

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
3
Oxyless

やってみよう

expect(page).to have_http_status(200)
2
Ajay

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 を確認してください

1
G. I. Joe