我将RSpec与FactoryGirl一起使用(以构建我的模型)来测试我的应用程序中的控制器,并且该测试失败了:
subject do
post :create, params: {
my_model: attributes_for(:my_model,
:pictures_for_post_request)
}, session: { user_id: user.id }
end
it 'return a 200 status response' do
subject
expect(response).to have_http_status 200
end
当测试失败时,它将返回http状态代码400,因为在我的模型验证中,我检查该模型的属性是否在两个整数值之间,并且作为param传递的值是一个字符串。
但是在我的控制器中,我解析了参数以获得适当的整数:
private
def sanitize_params
[my_params_keys].each do |k|
params[k] = params[k].to_i if params[k].nil?
end
end
我的问题是:如何在不重写此规范中的函数的情况下,在此控制器规范中正确清理/.to_i我的参数?
我认为最好是模型知道如何处理数据,而不是依赖于按预期方式格式化的数据。这就是模型验证的重点。如您所见,即使您尝试对其进行消毒,基于测试的参数也可以是任何东西。
class MyModel
before_validation :convert_my_attribute_to_integer
private
def convert_my_attribute_to_integer
self.my_attribute = self.my_attribute.to_i
end
end
这样,您的模型可以在多个上下文中使用,而不必担心输入格式是否正确。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句