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