ruby-on-rails - Rails 5、simple_form_for、RSpec 和 Capybara - click_button 不适用于我的表单
问题描述
以下 Capybara/RSpec 测试在我的 Rails 应用程序上失败,我不知道为什么。我正在使用 simple_form_for Gem 创建表单并提交按钮。更新方法似乎工作正常,就像我改变时一样
expect(@coin.currency_name).to eq('Updated Name')
至
expect(page).to have_text('Updated Name')
测试通过,更新后的名称显示在新页面上。但是,当我使用前面描述的 expect 方法时, @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>
解决方案
更换型号后,使用reload
方法:
click_button 'Submit'
@coin.reload
expect(@coin.currency_name).to eq('Updated Name')
推荐阅读
- flutter - 有没有办法在flutter web中将复制的图像复制到剪贴板
- jenkins - Catch Yarn 退出代码 1
- sql-server - 使用 SQL 创建 SCD 类型 2
- java - 用于处理需要限时释放的队列上的消息的优先队列
- sql - 用一行而不是几行表示数据
- c++ - Outlook 加载项无法写入注册表位置 HKEY_LOCAL_MACHINE\\SOFTWARE
- wpf - 如何在 WPF DataGrid 中添加带有文本框的行以用作搜索框
- wso2 - 我可以在 wso2 api 管理器中添加租户明智的策略吗
- opengl - 带有 GL_DYNAMIC_DRAW 的 OpenGL VAO
- reactjs - Format.js 提取嵌套在组件中的 FormattedMessage