Rails and RSpec: be_successful vs have_http_status



从我可以看到be_successful是核心Rails和have_http_status是RSpec的一部分。

是否有任何性能差异(或什么是首选约定):

expect(response).to have_http_status(:success)
expect(response).to be_successful

感谢

对于你的性能问题,没有区别。与创建和处理对控制器的命中相比,两者之间字符串比较或堆栈深度的任何微小变化都是微不足道的。如果您正在与缓慢的测试作斗争,请将重点放在避免数据库写入(例如Model。构建而不是Model.create),并模拟出测试类之外的类的方法。

美学上,我认为expect(response).to be_successful更切中要害。be_successful的未来更新(甚至当前实现)可能会添加比http_status == 200更有洞察力的测试或反馈。

我只会使用状态值检查,如果你出于某种原因对这个数字特别感兴趣,而不是成功命中的概念。

如果存在不匹配,

have_http_status将显示更具体/更友好的错误消息,这有助于调试。正如前面的回答所指出的,性能差异在测试套件的总体方案中可以忽略不计。

Failure/Error: expect(response).to have_http_status(:success)
expected the response to have a success status code (2xx) but it was 400

Failure/Error: expect(response).to be_successful
expected `#<ActionDispatch::TestResponse:0x00005650d1daf0e8 @mon_data=#<Monitor:0x00005650d1daeb98>, @mon_data_..., @method=nil, @request_method=nil, @remote_ip=nil, @original_fullpath=nil, @fullpath=nil, @ip=nil>>.successful?` to return true, got false

相关内容

  • 没有找到相关文章

最新更新