ruby-on-rails 如何使用Capybara + Selenium测试响应代码

w8biq8rn  于 2023-05-08  发布在  Ruby
关注(0)|答案(7)|浏览(229)

我有以下的规范:

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

end

page.status_code行给我这个错误:

Capybara::NotSupportedByDriverError

如何查看页面的状态代码?

qmb5sa22

qmb5sa221#

作为旁白。这条线

page.status_code.should = '404'

应该是

page.status_code.should == 404

我用capybara-webkit做了这个。

cwtwac6a

cwtwac6a2#

status_code目前不受Selenium驱动程序支持。您将需要编写一个不同的测试来检查响应状态代码。

ercv8c1e

ercv8c1e3#

切换到另一个驱动程序(如rack-test)进行该测试,或测试显示的页面是404页面(应该在h1中有内容'Not Found')。
正如@eugen所说,Selenium不支持状态码。

iq0todco

iq0todco4#

Selenium web driver没有实现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
ssm49v7z

ssm49v7z5#

试试看

expect(page).to have_http_status(200)
pftdvrlh

pftdvrlh6#

使用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了解更多详情

bwitn5fc

bwitn5fc7#

expect(page).to have_http_status(:ok)

Ajayanswer的一个可接受的变体,如果为了可读性,您更喜欢状态符号而不是代码值。
参考文献:

对于所有可用的状态代码/符号:

Rack::Utils::SYMBOL_TO_STATUS_CODE
       # or 
Rack::Utils::HTTP_STATUS_CODES

相关问题