【问题标题】:Rails Fixtures / Uncountable model name results in NoMethodErrorRails Fixtures / Uncountable model name 导致 NoMethodError
【发布时间】:2019-02-22 16:16:47
【问题描述】:

我有一个名为 EventSeries 的模型,它的单数与复数相同。我已经以我能想象到的各种方式将它添加到变形器中:

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

我在spec/fixtures 中有一个event_series.yml 固定装置文件。我什至尝试添加:

_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。

【问题讨论】:

  • 不是答案,抱歉,但仅供参考 - Rails 5.2、Ruby 2.6.0 和 minitest 5.11 - 工作正常,无需任何变形。
  • @smathy 可以肯定的是,我暂时移除了变形器,但这并没有帮助。所以这个问题可能是 RSpec 特有的。
  • inflect.uncountable(%w(equipment information rice money species series fish sheep jeans police)) Rails 默认包含series。我不确定 RSpec 的问题,但默认情况下 EventSeries 已正确变形,您无需添加任何内容。
  • event_series 应该是模型EventSeries 作为一个全球性的吗?你期待event_series(:d30_short_series) 做什么?对我来说,不清楚事物是如何联系起来的,您的假设和解决方案似乎是对应该与单数或复数同名的模型应用变形,但是如果没有您实施的修复,代码会做什么?
  • @DaniloCabello 这个应用程序使用了Rails fixtures,在这个上下文中event_series 是对Rails 夹具文件的引用。对于所有其他模型,此语法从 fixtures.yml 中返回一个项目。例如,users(:admin_user) 从用户夹具文件中返回一条记录。在这种情况下,event_series(:d30_short_series) 应该从 event_series.yml 文件中返回单个 event_series。

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


【解决方案1】:

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

这个specific spec 的问题是没有加载所需的固定装置。

你有两种选择来解决这个问题。

选项 1:在您的 rails_helper.rb 中将 :event_series 添加到 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.

我相信您比我更了解为什么页面上没有显示以下活动链接。

【讨论】:

  • 哇,我不敢相信我没有想到这一点。我非常确定这是一个多元化问题,我什至没有检查全局固定装置。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多