相对于rails 4.2.4
和rspec 3.4
升级,我正在修改大型应用程序中的规范。以前的开发人员使用subject.invoke
,但现在看起来它不起作用。什么是subject.invoke
以及如何替代它?
答案 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
。因此,这取决于主题的实施。