我想检查我的类是否正在创建一个新对象并返回它的实例。我的想法是将change
匹配器与be_instance_of
匹配器结合使用,但RSpec不允许这样做。
expect { subject.call }.to change { Model.count }.by(1).and be_an_instance_of(Model)
我不想将其拆分为两个不同的expects
,其中一个没有阻止,以避免多次调用相同的方法。
这种情况的一般方法是什么?我该如何处理我的案子?
答案 0 :(得分:1)
您可以将subject
定义为subject.call
并执行此操作:
specify do
expect { subject }.to change { Model.count }.by(1)
expect(subject).to be_an_instance_of(Model)
end
因此,如果以前您的主题是
subject { Foo.new }
制作
subject { Foo.new.call }
let
和subject
来电会被记忆,所以它只会被调用一次。
只有一个问题:如果第一个期望失败 - 第二个期望不会运行(这是SomethingToAvoidInSpecs™),所以请考虑aggregating failures来解决它。