Rails固定装置/无法计数的模型名称导致NoMethodError

时间:2019-02-22 16:16:48

标签: ruby-on-rails rspec fixtures ruby-on-rails-5.2

我有一个名为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>

我还有许多其他模型,并且该模式适用于所有其他模型(使用复数版本,例如usersevents),因此我认为这是一个复数问题。我已经搜索了答案并找到了this issue,这表明可以通过将模型名称添加到变形器中来解决问题,但这对我来说没有帮助。

我已经设法解决了其他所有固有的问题,其中无数的名称起作用;例如,我的路径助手都正常工作,Rails可以按预期找到我的视图文件。但是我无法解决这个灯具问题。

是否可以将RSpec指向访问灯具的正确方法?

使用Rails 5.2,Ruby 2.6.0和RSpec 3.8。

1 个答案:

答案 0 :(得分:2)

感谢共享您的开源项目,调查和解决问题更加简单。

specific spec的问题在于未加载所需的灯具。

您有两种选择来解决此问题。

选项1 :将:event_series添加到rails_helper.rb中的config.global_fixtures中。

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.

我相信您比我对为什么以下事件链接没有显示在页面上的理解更好。