我使用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我的params而不重写此规范中的函数?
答案 0 :(得分:0)
我认为最好是模型知道如何处理数据而不是依赖于按照预期方式格式化的数据。这是模型验证的重点。正如您所看到的,根据您的测试,即使您尝试对其进行消毒,参数也可以是任何东西。
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
这样,您的模型可以在多个上下文中使用,而不必担心输入是否格式正确。