如何使用rspec检查变量是否是模块子类的实例?
我有一个类似于以下的类结构:
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是一个未初始化的常量。 所以,我想问一下如何使用RSpecvalidation变量是否是MyInnerClass的实例。
不要通过一个街区
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。 您当然可以传递其他本地或实例变量,但在这种情况下, 主题已经为您定义为MyModule::MyOuterClass::MyInnerClass.new
。
我们大多数人都使用首选的Rspec语法,因此它将是:
expect(@instance_of_MyInnerClass).to be_a MyInnerClass
- 使用RSpec和Capybara检查图像和图标的存在
- Rails:使用RSpec测试命名范围
- rspec用户测试给出“未定义的局部变量或方法`confirmed_at’”
- 名为route的Rails无法识别
- 使用带有Page-Object的IE 11 x64时出现“Watir :: Exception :: NoMatchingWindowFoundException:浏览器窗口已关闭”错误
- rail3 / rspec / devise:除非我添加一个dummy = subject.current_user.inspect,否则rspec控制器测试失败
- 使用rspec的login_as首次测试失败
- Counter_cache列的Rspec测试返回0
- 为库模块添加rspec测试似乎并没有提升Expectations和Matchers