Rspec-rails: 在请求测试中将布尔值 true 传递给模型

创建于 2016-01-04  ·  6评论  ·  资料来源: rspec/rspec-rails

导轨版本:4.1.10
Rspec-rails 版本:3.0.2

我正在编写一个请求测试,一个模型需要一个属性是布尔值true ,而不是字符串true

从请求测试 ( param[:attribute] = true ) 传入此参数时,模型会收到: model.attribute = "true" 。 ( "true"作为字符串)

当从控制器测试( param[:attribute] = true )传递参数时,模型会收到: model.attribute = true 。 ( true为布尔值)

如何将true作为布尔值从请求测试传递给模型?

上述要点:
https://gist.github.com/a-leung/cc44372f1ae776726e89

最有用的评论

如果布尔参数作为真/假而不是字符串到达​​控制器,则很有可能您将它们作为正文中的 JSON 传递。 在这种情况下,您必须这样做:

post :update, params: { id: user.id, attribute: true }, as: :json

或这个:

post :update, params: { id: user.id }, body: { attribute: true }.to_json, as: :json

在测试中也将它们作为布尔值传递。

所有6条评论

你试过model.attribute =(1 == 1)吗?

问题不是分配model.attribute ,而是从控制器传入的 rspec 参数( params[:attribute] = true导致: model.attribute == true )和请求( params[:attribute] = true )之间的差异model.attribute == 'true' )。

给定相同的参数,控制器测试将布尔值 true 传递给模型,而请求测试将字符串 true 传递给模型。

如果事情不清楚,请告诉我,我可以创建一个简单的 rails 项目来演示。

这是rails测试如何表现的一个问题,实际上params将始终是字符串,除非先前由中间件解码,例如在JSON的情况下,这可能是控制器测试允许您传递真实对象的原因......

啊,好的。 感谢您的澄清。

有没有办法让请求测试使用与控制器测试相同的中间件?

他们已经会了。

如果布尔参数作为真/假而不是字符串到达​​控制器,则很有可能您将它们作为正文中的 JSON 传递。 在这种情况下,您必须这样做:

post :update, params: { id: user.id, attribute: true }, as: :json

或这个:

post :update, params: { id: user.id }, body: { attribute: true }.to_json, as: :json

在测试中也将它们作为布尔值传递。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

paulwalker picture paulwalker  ·  5评论

dwightwatson picture dwightwatson  ·  3评论

benpickles picture benpickles  ·  5评论

bibisreebi picture bibisreebi  ·  5评论

Matrixbirds picture Matrixbirds  ·  4评论