Capybara webkit 不会从 angular 传递参数

Capybara webkit doesn't pass params from angular

我正在尝试将 selenium 测试套件移植到 capybara-webkit。 Rails 应用程序在 rails 视图中嵌入了一个 angular 应用程序,并且在 webkit.

中未按预期运行

这样的测试:

需要'spec_helper'

feature 'Editing company profiles' do
  before do
    @user = create(:employee)
    @company = Company.find(@user.employer.id)
    sign_in_as! @user
  end

  scenario 'successfully', js: true do
    click_link 'Dashboard'
    click_link @company.name
    click_button 'Edit'
    fill_in 'company_name', with: 'new name'
    click_button 'Save'

    expect(page).to have_content "Your company profile has been updated!"
  end
end

将在 selenium 中毫无问题地通过,但是 webkit 我得到错误

 Failure/Error: Unable to find matching line from backtrace
 ActionController::ParameterMissing:
   param is missing or the value is empty: company
 # ./app/controllers/api/v1/companies_controller.rb:23:in `company_params'
 # ./app/controllers/api/v1/companies_controller.rb:10:in `update'

跟踪丢失,可能是因为它来自 angular 陆地,但错误是报告没有来自客户端的参数。我试过 capybara-angular gem,但没有用。我也试过用水豚保存页面,但没有什么不合适的地方,有什么方法可以访问在这个测试中生成的 webkit 内部的 PATCH 请求吗? poltergeist 我也遇到过类似的错误。

有人用 angular + rails 设置无头 rspec 测试吗?关于如何调试为什么没有从客户端发送数据的任何提示?

没有看到你的所有代码,感觉这可能是与 known issue in the capybara-webkit gem 无法将实体主体传递到服务器相关的问题。

我怀疑更新请求是作为 PATCH 请求发送的(这是适当的),但是 gem 的问题导致您的测试失败。

您的问题的解决方法是将请求方法更改为 PUTPOST,上面链接的问题显示了一些选项。您将能够让您的测试通过,但由您决定更改请求类型是否值得让您的测试通过。

注意: 实际上,如果您实际上不使用 PATCH 可能并不重要,因为您可以在技术上使用(一些) 其他 http 方法可以互换——但要谨慎使用,因为有理由在给定情况下使用特定的 http 方法。有关详细信息,请参阅几年前的 rubyonrails.org post。