Dan*_*nny 2 ruby rspec ruby-on-rails rr
我对涉及影响DB的控制器方法的rpsec测试的行为有点困惑.我见过很多涉及POST和DELETE的rspec测试示例,人们检查是否创建或删除了对象.在大多数这些测试中,人们只需通过以下测试检查数据库中模型的计数是增加还是减少:
delete :clear_photos, :id => @album.id
@album.photos.size.should == 0
Run Code Online (Sandbox Code Playgroud)
或与lambdas:
lambda {delete :destroy, :id => @photo.id}.should change(@album.photos, :size).by(-1)
Run Code Online (Sandbox Code Playgroud)
在最后一个例子中语法并不完美,但我的观点是,根据我的经验,我需要在对象上调用reload才能通过任何这些测试,但出于某种原因,其他人能够使它们工作没有显式调用重载.每次我测试db create/destroy动作时调用重载的东西对我来说都很可疑.
谁能帮我理解发生了什么?谢谢!
实际代码更新
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
Run Code Online (Sandbox Code Playgroud)
我收到了这个回复:
'PhotosController#clear should clear all photos for an album' FAILED
expected: 0,
got: 2 (using ==)
./spec/controllers/photos_controller_spec.rb:17:
Run Code Online (Sandbox Code Playgroud)
如果我在调用photo_count之前重新加载@album,它会起作用.
| 归档时间: |
|
| 查看次数: |
2181 次 |
| 最近记录: |