RSpe c helper spe c не работает, но работает в браузере - PullRequest
0 голосов
/ 23 марта 2020

У меня есть вспомогательный метод для возврата сообщений об ошибках под соответствующим полем в моей форме. В браузере он работает должным образом и отображает сообщение об ошибке, если оно есть, но spe c для помощника не выполняется.

Чего мне не хватает?

# _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 ""

1 Ответ

0 голосов
/ 23 марта 2020

object.company_name возвращает название компании.

Требуется имя столбца, а не значение столбца

, поэтому вместо ...

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')
...