2016-08-11 2 views
0

私はRSpecを初めて使っています。フォームをリモートで送信するときのフィーチャ仕様の書き方:true

私は "remote:true"という形式を持っており、そのための仕様書を書きたいと思っています。ここで

.row 
    .col-md-offset-4.col-md-4.col-sm-offset-3.col-sm-6 
    = form_for @reading, html: {class: 'form-inline'}, remote: true do |f| 
    #error_box 
    .row 
    .col-md-9 
     .input-group.full-width 
     = f.text_field :label, class: 'form-control', placeholder: t('readings.new.lable_placeholder') 
     %span.input-group-addon mg/dl 
    .col-md-3 
    = f.submit t('readings.new.enter'), class: 'btn btn-success full-width' 
    #reading_panel 
    = render partial: 'reading_panel', locals: {readings: @readings} 

はパーシャルを再描画し、私のコントローラ

def create 
    @reading = current_user.readings.create(reading_params) 
end 

create.js.erbです。次のコード

 scenario "add a new reading" do 
     visit new_reading_url 

     within "#new_reading" do 
     fill_in "reading_label" , with:10 
     submit_button = page.find("input[type=submit][value='Enter']") 
     submit_button.click 
     expect(Reading.count).to eq(1) 
     end 
    end 

<% if @reading.valid? %> 
    $("#reading_panel").html("<%= j render partial: 'reading_panel', locals: {readings: @readings} %>"); 
    $("#reading_label").val(''); 
    <% else %> 
    $("#error_box").html("<%= j render partial: 'shared/error_messages', locals: {reading: @reading} %>"); 
    <% end %> 

スペックは、だから何、私がお聞きしたいのは、私はパーシャルがcreate.js内にレンダリングされているかどうかの応答がjsの応答と チェックであることをテストする方法であります.erb。

ご協力いただければ幸いです!

答えて

3

機能テストで応答の種類を確認する必要はありません。画面上で発生すると予想される変更が行われることを確認してください(ほとんどの場合、データベースのカウントを直接確認するべきではありません)。通常推奨されるマナーでcapybara、rspec、database_cleanerをセットアップしている場合(javascript対応ドライバを選択 - デフォルトはselenium)、テストは次のようになります。

scenario "add a new reading", js: true do # in recommended config js: true tells the test to use Capybara.javascript_driver 
    visit new_reading_url 

    within "#new_reading" do 
    fill_in "reading_label" , with: '10' 
    click_button('Enter') 
    end 

    expect(page).to have_css('#reading_panel', text: '10') # assuming it just renders the submitted text into the panel 
    expect(page).to have_field('reading_label', with: '') # verify the input was cleared 
end 
関連する問題