Rails 5, simple_form_for, RSpec & Capybara - кнопка click_ не работает с моей формой - PullRequest
0 голосов
/ 21 февраля 2019

Следующий тест Capybara / RSpec не выполняется в моем приложении Rails, и я не могу понять, почему.Я использую Gem simple_form_for для создания формы и отправки кнопки.Кажется, что метод обновления работает должным образом, так как, когда я меняю

expect(@coin.currency_name).to eq('Updated Name')

на

expect(page).to have_text('Updated Name')

, тест проходит, и обновленное имя отображается на новой странице.Однако @coin.currency_name, похоже, не обновляется, когда я использую ранее описанный метод ожидаемого.Когда я вручную обновляю модель Coin (на странице, не используя RSpec), она работает нормально, и currency_name обновляется.

Что я делаю не так в этом тесте?

спец / особенности / монеты / coin_spec

require 'rails_helper'

RSpec.feature 'Coins' do 
  before(:each) do 
    @user = FactoryBot.create(:user)
  end 

  context 'update coin' do
    scenario 'should succesfully edit name if user=admin' do
      @user.update(admin: true)
      login_as(@user, :scope => :user)
      @coin = Coin.create!(currency_name: "TestName", user_id: @user.id)
      visit edit_coin_path(@coin)
      fill_in 'Currency Name', with: 'Updated Name'
      click_button 'Submit'
      expect(@coin.currency_name).to eq('Updated Name') 
    end
  end
end

app / views / coins / edit.html.erb

<div class='form-container'>
  <%= simple_form_for @coin, url: coin_path do |f| %>
    <h2>Edit Coin</h2>
    <div class="form-container__section">
      <%= f.input :currency_name, label: "Currency Name", class: 'form-control' %>
      <%= f.input :link_name, placeholder: "Link Name", label: false, class: 'form-control' %>
      ...
      <%= f.button :submit, value: "Submit", class: "btn primary-small", style: "margin-top: 20px;" %>
  <% end %>
</div>

и HTML

<div class="form-container">
  ...
  <h2>Edit Coin</h2>
  <div class="form-container__section">     
    <div class="form-group string required coin_currency_name"><label class="control-label string required" for="coin_currency_name"><abbr title="required">*</abbr> Currency Name</label><input class="form-control string required" type="text" value="OldName" name="coin[currency_name]" id="coin_currency_name"></div>
  ...
  <input type="submit" name="commit" value="Submit" class="btn btn-default primary-small" style="margin-top: 20px;" data-disable-with="Update Coin">        
</form>

1 Ответ

0 голосов
/ 21 февраля 2019

После смены модели используйте метод reload:

click_button 'Submit'
@coin.reload
expect(@coin.currency_name).to eq('Updated Name')
...