Rspec-rails: set_fixture_class 在 config.before 块中不起作用

创建于 2012-02-28  ·  6评论  ·  资料来源: rspec/rspec-rails

这不起作用:

RSpec.configure do |config|
  config.before { set_fixture_class :foo => Bar }
end

如果我尝试运行它,它会告诉我: spec_helper.rb:6:in 'included': undefined method 'set_fixture_class' for FixtureClasses:Module (NoMethodError)

为了获得等效的功能,我需要跳过这样的障碍:

module FixtureClasses
  extend ActiveSupport::Concern
  included do
    set_fixture_class :foo => Bar
  end
end

RSpec.configure do |config|
  config.include FixtureClasses
end

最有用的评论

当您还拥有引用夹具 foo 的 before 块时,config.before 并不能很好地工作。 在这些情况下,首先调用更接近规范的 before 块,这将再次抛出FixtureClassNotFound: No class attach to find。 使用 before(:all) 为我解决了这个问题。

config.before(:all) do
  self.class.set_fixture_class :foo => Bar
end

所有6条评论

那是因为 set_fixture_class 是一个类方法,但在钩子在实例范围内运行之前。 您需要执行以下操作:

config.before {
  self.class.class_eval {
    set_fixture_class :foo => Bar
  }
}

你能做到吗:

RSpec.configure do |config|
  config.set_fixture_class :foo => Bar
end

@justinko :这给了我undefined method 'set_fixture_class' for #<RSpec::Core::Configuration:0x007fb813d3fe78> (NoMethodError)

@skizzybiz对不起@dchelimsky是对的,它是一个类方法。

由于 set_fixture_class 是一个公共方法,你也可以这样做:

config.before do
  self.class.set_fixture_class :foo => Bar
end

当您还拥有引用夹具 foo 的 before 块时,config.before 并不能很好地工作。 在这些情况下,首先调用更接近规范的 before 块,这将再次抛出FixtureClassNotFound: No class attach to find。 使用 before(:all) 为我解决了这个问题。

config.before(:all) do
  self.class.set_fixture_class :foo => Bar
end
此页面是否有帮助?
0 / 5 - 0 等级