我有一个类结构,看起来像这样:
module MyModule
class MyOuterClass
class MyInnerClass
end
end
end
我试图确保一个变量被正确实例化为MyInnerClass使用Rspec。打印类的类型,它是MyModule::MyOuterClass::MyInnerClass。但是,如果我尝试运行
行expect{@instance_of_MyInnerClass}.to be_an_instance_of(MyModule::MyOuterClass::MyInnerClass)
我得到错误"你必须传递一个参数而不是一个块来使用提供的匹配器。"此外,类在另一个位置,所以我不能只检查
[...] be_an_instance_of(MyInnerClass)
Rspec抱怨MyInnerClass是一个未初始化的常量。所以,我想问如何验证一个变量是MyInnerClass使用RSpec的实例。
不要传递Block
Rspec 3。x使用expect 方法而不是块语法(参见RSpec 3 Expectations 3.0)。为了让你的规范通过并清理它,你可以使用以下命令:
module MyModule
class MyOuterClass
class MyInnerClass
end
end
end
describe MyModule::MyOuterClass::MyInnerClass do
it "is correctly instantiated" do
expect(subject).to be_an_instance_of MyModule::MyOuterClass::MyInnerClass
end
end
注意隐式主语的使用,作为参数传递给#expect。您当然可以传递其他局部变量或实例变量,但是在这种情况下,subject已经为您定义为MyModule::MyOuterClass::MyInnerClass.new
。
我们大多数人都在使用首选的Rspec语法,所以它将是:
expect(@instance_of_MyInnerClass).to be_a MyInnerClass