我有一个如下所示的类结构:
module MyModule
class MyOuterClass
class MyInnerClass
end
end
end
我试图确保使用Rspec将变量正确地实例化为MyInnerClass。打印类的类型,它是MyModule :: MyOuterClass :: MyInnerClass。但是,如果我尝试运行该行
expect{@instance_of_MyInnerClass}.to be_an_instance_of(MyModule::MyOuterClass::MyInnerClass)
我收到错误"您必须传递参数而不是块才能使用提供的匹配器。"此外,课程在另一个地方,所以我不能检查
[...] be_an_instance_of(MyInnerClass)
Rspec抱怨MyInnerClass是一个未初始化的常量。所以,我想问一下如何使用RSpec验证变量是否是MyInnerClass的实例。
答案 0 :(得分:1)
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
定义。
答案 1 :(得分:0)
我们大多数人都使用首选的Rspec语法,因此它将是:
expect(@instance_of_MyInnerClass).to be_a MyInnerClass