RSpec 帮助规范失败但在浏览器中有效
RSpec helper spec fails but works in browser
我有一个辅助方法 return 表单中相应字段下的错误消息。
在浏览器中,它按预期工作并显示错误消息(如果有),但助手的规范失败了。
我错过了什么?
# _form.html.haml
= form_for [:admin, @partner] do |f|
= f.select :trader_id, options_for_select(@traders.map { |trader| [trader.company_name, trader.id] }, selected: @partner.trader_id), {}, class: 'form-control form-control-sm'
= error_message(@partner, :trader)
# errors_helper.rb
def error_message(object, field)
return unless object.errors[:"#{field}"]
content_tag :div do
object.errors[:"#{field}"].each do |msg|
concat content_tag(:small, msg, class: 'text-danger')
end
end
end
#errors_helper_spec.rb
require 'rails_helper'
RSpec.describe ErrorsHelper do
describe '#error_message' do
it 'returns an error message' do
object = build(:trader, company_name: nil)
expect(helper.error_message(object, object.company_name)).to have_content('moet ingevuld zijn')
end
end
end
运行 这个规格告诉我:
expected to find text "moet ingevuld zijn" in ""
object.company_name
returns公司名称。
您需要列的名称,而不是列的值
所以而不是...
expect(helper.error_message(object, object.company_name)).to have_content('moet ingevuld zijn')
使用...
expect(helper.error_message(object, 'company_name')).to have_content('moet ingevuld zijn')
此外,您需要调用验证来检查错误消息...
object = build(:trader, company_name: nil)
object.valid?
expect(helper.error_message(object, 'company_name')).to have_content('moet ingevuld zijn')
我有一个辅助方法 return 表单中相应字段下的错误消息。 在浏览器中,它按预期工作并显示错误消息(如果有),但助手的规范失败了。
我错过了什么?
# _form.html.haml
= form_for [:admin, @partner] do |f|
= f.select :trader_id, options_for_select(@traders.map { |trader| [trader.company_name, trader.id] }, selected: @partner.trader_id), {}, class: 'form-control form-control-sm'
= error_message(@partner, :trader)
# errors_helper.rb
def error_message(object, field)
return unless object.errors[:"#{field}"]
content_tag :div do
object.errors[:"#{field}"].each do |msg|
concat content_tag(:small, msg, class: 'text-danger')
end
end
end
#errors_helper_spec.rb
require 'rails_helper'
RSpec.describe ErrorsHelper do
describe '#error_message' do
it 'returns an error message' do
object = build(:trader, company_name: nil)
expect(helper.error_message(object, object.company_name)).to have_content('moet ingevuld zijn')
end
end
end
运行 这个规格告诉我:
expected to find text "moet ingevuld zijn" in ""
object.company_name
returns公司名称。
您需要列的名称,而不是列的值
所以而不是...
expect(helper.error_message(object, object.company_name)).to have_content('moet ingevuld zijn')
使用...
expect(helper.error_message(object, 'company_name')).to have_content('moet ingevuld zijn')
此外,您需要调用验证来检查错误消息...
object = build(:trader, company_name: nil)
object.valid?
expect(helper.error_message(object, 'company_name')).to have_content('moet ingevuld zijn')