什么是rspec中的subject.invoke?

时间:2016-01-20 11:25:42

标签: ruby-on-rails ruby testing rspec

相对于rails 4.2.4rspec 3.4升级,我正在修改大型应用程序中的规范。以前的开发人员使用subject.invoke,但现在看起来它不起作用。什么是subject.invoke以及如何替代它?

2 个答案:

答案 0 :(得分:1)

由于某个特定原因,这个问题真的很难回答 - subject可以是任何内容,并且会在您的测试中定义。

可以通过隐式或显式定义subject两种方式。隐含地,它使用最顶层describe中使用的类,所以如果你有:

describe MyClass do
  it 'works' do
    subject
  end
end

subject将执行MyClass.new并将缓存结果,以便每次对主题的后续调用都将返回相同的对象。

您可以使用显式subject定义覆盖默认主题:

describe MyClass do
  subject { described_class.new some: "extra-params" }
  it 'works' do
    subject
  end
end

因此,subject.invoke是对你的主题是什么对象的jest执行invoke方法。您需要了解subject是什么,并找到其类来了解invoke

的定义

答案 1 :(得分:0)

subject是当前上下文中subject块的返回值。如果你有像这样的块

subject { Foo.new }

然后示例中的subject调用将返回新的Foo实例。

以下invoke只是在invoke上调用subject。因此,这取决于主题的实施。