gpt4 book ai didi

ruby-on-rails - 更改数据库的 Rspec 操作

转载 作者:数据小太阳 更新时间:2023-10-29 08:34:21 24 4
gpt4 key购买 nike

我对涉及影响数据库的 Controller 方法的 rpsec 测试的行为感到有点困惑。我见过许多涉及 POST 和 DELETE 的 rspec 测试示例,人们在其中检查对象是否已创建或删除。在大多数这些测试中,人们能够通过以下测试检查数据库中模型的数量是否增加或减少:

delete :clear_photos, :id => @album.id
@album.photos.size.should == 0

或使用 lambda:

lambda {delete :destroy, :id => @photo.id}.should change(@album.photos, :size).by(-1)

上一个示例中的语法并不完美,但我的观点是,根据我的经验,我需要对对象调用重新加载才能通过这些测试中的任何一个,但出于某种原因,其他人能够让它们在不显式调用重新加载的情况下工作。每次我测试数据库创建/销毁操作时调用重新加载对我来说似乎很可疑。

任何人都可以帮助我了解发生了什么事吗?谢谢!

实际代码更新

it "should clear all photos for an album" do
@album = Factory(:album, :photos => [Factory(:photo), Factory(:photo)])
delete :clear, :album_id => @album.id
@album.photo_count.should == 0
end

我收到这样的回复:

'PhotosController#clear should clear all photos for an album' FAILED
expected: 0,
got: 2 (using ==)
./spec/controllers/photos_controller_spec.rb:17:

不过,如果我在调用 photo_count 之前重新加载 @album,它会起作用。

最佳答案

我想指出的是,在 Controller 规范中测试模型状态并不是一个很好的做法,因为它违反了单元测试的隔离性。您应该改为测试 Controller 响应是否适合当前场景。

关于ruby-on-rails - 更改数据库的 Rspec 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5892275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com