Rails Fixtures / Неисчислимое имя модели приводит к NoMethodError - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть модель с именем EventSeries, которая такая же, как и во множественном числе.Я добавил это всеми возможными способами к инфлектору:

inflect.uncountable %w( fish sheep EventSeries event_series Series series )

У меня есть event_series.yml файл приборов в spec/fixtures.Я даже пытался добавить:

_fixture:
  model_class: EventSeries

вверху файла yml, но это не помогает.

Я также попытался изменить имя файла на event_serieses.yml и вызвать event_serieses(:d30_short_series), и я получил NoMethodError undefined method event_serieses.

Я использую RSpec для тестирования.В спецификации системы у меня есть следующее объявление:

let(:subject_series) { event_series(:d30_short_series) }

Когда я запускаю спецификацию, я получаю эту ошибку:

NoMethodError: undefined method `event_series' for <RSpec::MySpecFile>

У меня есть много других моделей, и этот шаблон работает длялюбая другая модель (использующая версию множественного числа, например users или events), поэтому я предполагаю, что это проблема множественного числа.Я искал ответы и нашел эту проблему , которая указывает, что проблему можно решить, добавив название модели к инфлектору, но это не помогло в моем случае.

I 'нам удалось заставить работать все остальные проблемы с неисчислимыми именами;например, все мои помощники пути работают правильно, и Rails находит мои файлы просмотра, как и ожидалось.Но мне не удалось решить эту проблему с приборами.

Есть ли способ указать RSpec правильный способ доступа к моим приборам?

Использование Rails 5.2, Ruby 2.6.0 и RSpec 3.8.

1 Ответ

0 голосов
/ 04 марта 2019

Спасибо, что поделились своим проектом с открытым исходным кодом, было проще исследовать и решить проблему.

Проблема с этой специфической спецификацией заключается в том, что необходимые приборы не загружались.

У вас есть два варианта решения этой проблемы.

Опция 1 : Добавьте :event_series к config.global_fixtures в вашем rails_helper.rb.

RSpec.configure do |config|
  config.global_fixtures = :a, :event_series, ..., :n

Вариант 2 : загрузить приспособление только на эту спецификацию visit_event_series_spec.rb

RSpec.describe 'visit an event series page' do
  fixtures :event_series

  let(:user) { users(:third_user) }

Тогда спецификация не будет выполнена, но дляразличные причины:

Failures:

  1) visit an event series page when the user is a visitor when all categories are populated Visit the page
     Failure/Error: expect(page).to have_link(resource.send(attr), href: path)
       expected to find visible link "Dirty 30 Running" but there were no matches. Also found "Dirty 30 Running", which matched the selector but not all filters.

По моему мнению, вы лучше меня понимаете, почему следующая ссылка на событие не отображается на странице.

...