如何使用 Capybara 测试 OPTIONS 请求?

Posted

技术标签:

【中文标题】如何使用 Capybara 测试 OPTIONS 请求?【英文标题】:How to test OPTIONS request with Capybara? 【发布时间】:2015-09-04 18:36:01 【问题描述】:

用 Capybara 测试 OPTIONS 响应的好方法是什么?

用例:需要为 CORS 配置 Rails 应用响应标头。我知道这不是“用户体验”的一部分。但是,如果浏览器无法发出请求,用户将无法使用该网站。

【问题讨论】:

【参考方案1】:

使用 Capybara 测试 OPTIONS 响应的一个好方法是不使用 Capybara。

除了玩笑,最好在 controller test 请求规范中完成,因为它不涉及任何实际的 html 解析。

RSpec.describe 'Rabbits' do
  describe "GET /rabbits/:id" do
    it "enables CORS" do
      get rabbit_path(rabbit)
      expect(response.headers['Access-Control-Allow-Origin']).to eq "*"
    end
  end
end

您可以使用process :show, "OPTIONS" [1] 测试OPTIONS http 方法

【讨论】:

基本上你不应该使用 Capybara,因为除了发送 GET 请求(使用 visit)之外的任何东西都需要一些非常痛苦的 hack,根据正在使用的驱动程序可能会或可能不会起作用(例如rack_test、poltergeist 或 selenium)。 Capybara 也很慢,因为它的级别非常高,而且比控制器测试要多得多。 请注意,通过表单或 JS 发送 POST 或删除是另一种情况。我说的是从 capybara 发送原始 OPTIONS 请求。 我收到了undefined method 'call' for 应用程序,所以测试设置似乎有问题... 编辑以反映控制器规格现在不鼓励使用的事实。

以上是关于如何使用 Capybara 测试 OPTIONS 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Capybara + Selenium 测试响应代码

如何使用rails cucumber,rspec,capybara在视图(dhtml)中测试动态部分?

如何使用 Capybara Rspec Matchers 测试演示者?

如何使用 capybara DSL 测试 Select2 元素?

问:如何使用 Turnip、capybara 和 Gherkin 测试 ActionMailer Deliver_later

如何使用惰性加载器捕获 Capybara Feature JS 测试的服务器端错误?