私は私のプロジェクトをテストするためにカピバラを使用しています。しかし、私は問題があります。 プロジェクトにリモートフォームがあります。彼らはajax経由でレコードを追加します。私がcapybaraでテストしているとき、開発環境でうまく動作します。それはページを訪問し、フォームに記入して提出する。 Booom、レコードが追加され、テストが失敗しました。 しかし、テスト環境でrspecを実行すると、不明な形式の例外が発生しています。Rails、Capybara - リモートリンクのクリックリンクは動作しません
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)>'
また、次のようなコントローラからjsを介して応答しようとしました。
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)>'
さらに詳しい情報が必要な場合は私のシナリオです。
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
PS:私の作成アクションは、そのようなものを表示しません。 そのような;
def create
@new_address = Address.new
@address = @current_account.addresses.new(address_params)
if @address.save
@check = true
else
@check = false
end
end
それはレンダリング:あなたのテストの設定は、あなたの問題を修正の上に、開発の設定をコピーして以来create.js.erb
<% if @check %>
if($('.addresses').length) {
$('.addresses').append('<%= j(render('account/addresses/address', address: @address)) %>');
}
if($('#did-addresses').length){
$('#did-addresses').append("<%= "<option selected='true' value='#{@address.id}'>#{@address.name}</option>".html_safe %>").selectpicker('refresh');
}
$('#new-address').html('<%= j(render('account/addresses/form', new_address: @new_address)) %>');
swal({
type: 'success',
title: "<%= t('response.success') %>",
text: "<%= t('flash.actions.create.notice', resource_name: Address.model_name.human) %>",
timer: 2000
});
quickview.close('#new-address');
<% else %>
<% @address.errors.each do |error| %>
<% end %>
<% end %>
$('.preloader').fadeOut();
'jquery-ujs'(Railsの目立たないjavascriptドライバ)が動作していない場合、' remote:true'は普通のHTMLリクエストに戻ります。カピバラにはどのドライバーを使っていますか? – max
IRB(メイン):001:0> Capybara.current_driver =>:rack_test IRB(メイン):002:0> Capybara.javascript_driver =>:セレン はまた、これらが正確開発およびテスト環境の両方で同じです。 –
'シナリオ 'ユーザが新しいアドレス'、javascript:true do'を追加しようとしましたか?テストがラックテストで実行されている場合、ラックテストではjsが実行されないため、テストが説明されます。 – max