所以我在Rails中使用rspec这样的东西:
it "should create a new user" do
lambda do
post :create, @attr
end.should change(User,:count)
end
但是帖子:create,@ attr创建了一个用户和一个公司,那么如何“链接”更改调用以便我可以测试它们?
我正在寻找的是end.should change(User,:count) && change(Company,:count)
答案 0 :(得分:8)
我认为你试图在一次测试中断言很多,但它与测试的名称不符。请考虑一下:
it "should create a new user" do
lambda do
post :create, @attr
end.should change(User,:count)
end
it "should create a new company" do
lambda do
post :create, @attr
end.should change(Company,:count)
end
另外,你可能没有意识到有一种更好的方式来编写那些做同样事情的断言,但读得更好:
expect {
post :create, @attr
}.to change(Company, :count)
答案 1 :(得分:1)
作为开发人员成长几年后,我发现了一个非常干净的解决方案,可以在需要时测试多个值:
expect{ execute }.to change{ [spe1.reload.trashed?, spe2.reload.trashed?] }.from([true, true]).to([false, false])
但是当我们确实需要测试多个记录的创建时:
[User, Company].each do |klass|
it "creates one #{klass}" do
expect{ post :create, valid_args }.to change(klass, :count).by(1)
end
end
答案 2 :(得分:0)
@idlefingers - re:
“我认为你在一次测试中试图断言很多 与测试名称“
不匹配
要解决这个问题,你可以使用这个技巧:
def user_and_company_count
User.count + Company.count
end
it "can assert both counts" do
expect { post :create, @attr }.to change(self, :article_an_activity_count).by(2)
end