在rspec中,将类名传递给共享示例的正确方法是什么?
在测试模块的rspec测试套件中,是用于评估包含该模块的类的行为的测试。下面是一个粗略的例子在rspec中,将类名传递给共享示例的正确方法是什么?,rspec,Rspec,在测试模块的rspec测试套件中,是用于评估包含该模块的类的行为的测试。下面是一个粗略的例子 describe "MyMod" do module MyMod; end shared_examples_for "a class" do |klass| it "includes the module" do klass.included_modules.include? MyMod.should be_true end end describe
describe "MyMod" do
module MyMod; end
shared_examples_for "a class" do |klass|
it "includes the module" do
klass.included_modules.include? MyMod.should be_true
end
end
describe "when included in a class" do
before(:each) { class C; include MyMod; end }
it_behaves_like "a class", C
end
describe "when extended in a class" do
before(:each) { class C; extend MyMod; end }
it_behaves_like "a class", C
end
end
我遇到的问题是,当执行类的行为类似于时,类C
没有定义,从而产生错误:
`block (2 levels) in <top (required)>': uninitialized constant C (NameError)
`block(2级)in':未初始化常量C(NameError)
定义类并将其传递给共享示例的正确方法是什么?您遇到的问题是,在执行块之前,共享示例的参数在之前进行计算。您需要传递共享示例符号:C
,并让您的示例将其转换为常数,或者需要传递一个设置其他变量的块,如是的,谢谢,我从阅读本书中猜到了这一点。我尝试了let(:klass){Class.new.extend(MyMod)}
,它适用于extend
,但对include
给出了一个错误:“调用了私有方法`include'。我想我会用不同的方法!