Rails 夹具/不可数的模型名称导致 NoMethodError
Rails Fixtures / Uncountable model name results in NoMethodError
我有一个名为 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>
我还有许多其他模型,此模式适用于所有其他模型(使用复数形式,如 users
或 events
),因此我认为这是一个复数问题。我搜索了答案并找到了 this issue,这表明可以通过将模型名称添加到变形器来解决问题,但这对我的情况没有帮助。
我已经设法解决了不可数名称的所有其他固有问题;例如,我的路径助手都正常工作并且 Rails 可以按预期找到我的视图文件。但是一直没能解决这个夹具问题
有没有办法将 RSpec 指向访问我的固定装置的正确方法?
使用 Rails 5.2、Ruby 2.6.0 和 RSpec 3.8。
感谢您分享您的开源项目,调查和解决问题变得更加简单。
这个 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.
我相信你比我更了解为什么页面上没有显示以下事件link。
我有一个名为 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>
我还有许多其他模型,此模式适用于所有其他模型(使用复数形式,如 users
或 events
),因此我认为这是一个复数问题。我搜索了答案并找到了 this issue,这表明可以通过将模型名称添加到变形器来解决问题,但这对我的情况没有帮助。
我已经设法解决了不可数名称的所有其他固有问题;例如,我的路径助手都正常工作并且 Rails 可以按预期找到我的视图文件。但是一直没能解决这个夹具问题
有没有办法将 RSpec 指向访问我的固定装置的正确方法?
使用 Rails 5.2、Ruby 2.6.0 和 RSpec 3.8。
感谢您分享您的开源项目,调查和解决问题变得更加简单。
这个 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.
我相信你比我更了解为什么页面上没有显示以下事件link。