我遇到了这个问题,我的测试失败了,因为验证存在:true无法正常工作。我想知道为什么它没有触发。所以,这是我的代码:
控制器中的简单更新
def update
person = Person.find_by( params[:id] )
if person.update( params_person )
render json: {}, status: :ok
else
render json: person.errors, status: :422
end
end
def params_person
params.require( :person ).permit( :firstname, :lastname, ... , hobbies: [] )
end
hobbies: []
是一系列字符串爱好,例如['playing dota', 'basketball', 'coding', ... ]
人物模型
class Person < ActiveRecord::Base
...
validates :hobbies, presence: true
...
end
如果我提出了
的请求{ ...
...
hobbies: nil/'',
...
...
}
验证仍然在没有更新爱好的情况下作为数据nil/''
describe '#update' do
let( :user ) { create( :user ) }
fcontext 'when params missing' do
before do
put :update, id: person.id,
person: {
....,
....,
hobbies: nil
}
end
it 'respond an error message' do
expect( response_body ).to include( "Hobbies can't be blank" )
end
it { expect( response ).to have_http_status( 422 ) }
end
答案 0 :(得分:1)
当您将hobbies: []
置于strong_params定义中,然后继续将标量传递给hobbies
(您的nil
那里)时,强参数不允许这样做,因此,不会在更新中触及。
要验证这一点,请检查该测试中的params_person
。