Capybara webkit不会从角度传递params

时间:2015-01-06 23:08:32

标签: ruby-on-rails angularjs capybara-webkit

我正在尝试将selenium测试套件移植到capybara-webkit。 Rails应用程序在rails视图中嵌入了一个角度应用程序,并且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'

缺少痕迹,可能是因为它来自有角度的土地,但错误是报告没有来自客户端的参数。我已经尝试了capybara-angular宝石,但它没有帮助。我也尝试用capybara保存页面,没有什么看起来不合适,有没有办法访问webkit中的PATCH请求在此测试中生成?我也poltergeist也遇到了类似的错误。

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

1 个答案:

答案 0 :(得分:8)

在没有看到所有代码的情况下,感觉可能是与known issue中的capybara-webkit gem相关联的问题无法将实体主体传递到服务器。

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

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

注意:在实践中,如果您实际上没有使用PATCH可能无关紧要,因为您可以在技术上使用(部分)其他http方法可以互换 - 但要小心,因为有理由在特定情况下使用特定的http方法。几年前见这篇rubyonrails.org帖子了解一些细节。