Rails,Capybara - 远程链接上的click_link不起作用

时间:2017-11-10 11:02:05

标签: ruby-on-rails rspec capybara rspec-rails

我正在使用Capybara来测试我的项目。但我有一个问题。 我的项目中有一些远​​程表单。他们通过ajax添加记录。当我使用水豚进行测试时,它在开发环境中运行良好。它访问页面,填写表格并提交。 Booom,记录已添加,测试没有失败。 但是当我在测试环境中运行rspec时,我会遇到未知的格式异常。

MigLayout

我也试图通过来自控制器的js响应,如<; p>

 1) add new address user adds new address
 Failure/Error: find("input[value='Adres Ekle']").click

 ActionController::UnknownFormat:
   Account::AddressesController#create is missing a template for this request format and variant.

   request.formats: ["text/html"]
   request.variant: []
 # ./spec/features/user_add_new_address_spec.rb:28:in `block (2 levels) in <top (required)>'

然后它返回;

 def create
    request.format = :js
 end

如果你想了解更多信息,我的情况就是这样;

 1) add new address user adds new address
 Failure/Error: find("input[value='Adres Ekle']").click

 ActionController::UnknownFormat:
   Account::AddressesController#create is missing a template for this request format and variant.

   request.formats: ["text/javascript"]
   request.variant: []
 # ./spec/features/user_add_new_address_spec.rb:28:in `block (2 levels) in <top (required)>'

PS:我的创建动作不会呈现类似的东西。 它就像;

scenario 'user adds new address' do
  expect(page).to have_content 'Kayıtlı Adreslerim'
  find("a[title='Adres Ekle']").click
  expect(page).to have_content 'Yeni Adres Ekle'
  expect(page).to have_content 'Adres Başlığı'
  fill_in 'address[name]', with:'Izmir Ofisi'
  select('Izmir', :from => 'address[city_id]')
  fill_in 'address[address]', with: 'Lorem ipsum dolor sit amet.'
  find("input[value='Adres Ekle']").click # It submits remote: true form. 
  expect(page).to have_content 'Success!'
end

它呈现:create.js.erb

def create
    @new_address = Address.new
    @address = @current_account.addresses.new(address_params)
    if @address.save
      @check = true
    else
      @check = false
    end
end

2 个答案:

答案 0 :(得分:1)

我在 rails 6 中遇到了同样的情况,但我修复了将 js: true 添加到 scenario 并自动运行良好的问题。

  scenario 'Should delete the feature', js: true do
    # Your logic
    # Your expectations
  end

答案 1 :(得分:0)

由于您的测试配置上的开发配置复制修复了您的问题,听起来您可能是一个JS文件中的错误。通常在测试和生产环境中,所有JS资产都会连接成一个文件,这意味着其中任何一个文件中的错误都可能阻止其他文件中的代码被执行。在开发环境中,每个JS文件都是单独加载的,这意味着任何文件中的错误只会影响该文件中的其余代码。在访问相关页面并修复它们时,请在浏览器中检查控制台是否存在任何JS错误。