代码之家  ›  专栏  ›  技术社区  ›  mattC

Rails 5、简单表单、RSpec和水豚-单击按钮不适用于我的表单

  •  0
  • mattC  · 技术社区  · 5 年前

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

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

    测试通过,更新的名称显示在新页面上。然而 @货币名称 当我使用前面描述的expect方法时,似乎没有更新。当我手动更新硬币模型时(在页面上,不使用RSpec),它工作正常,并且 货币名称 已更新。

    这次考试我做错了什么?

    规格/特征/硬币/硬币规格

    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
    

    <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>
    

    <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 回复  |  直到 5 年前
        1
  •  3
  •   barmic    5 年前

    更换型号后,使用 reload 方法:

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