如何解决rails 6,minitest 和设计有效记录但创建计数不正确
以下测试:
test "create with mobile" do
assert @user_mobile.valid?,@user_mobile.errors.full_messages.inspect
puts assert @user_mobile.valid?
assert_difference('User.count') do
post users_url,params: { user: { mobile: @user_mobile.mobile,name_first: @user_mobile.name_first,name_last: @user_mobile.name_last,nation_id: @user_mobile.nation_id,mobile_nation_id: @user_mobile.mobile_nation_id,password: '11111111',password_confirmation: '11111111',idiom_id: @user_mobile.idiom_id } }
end
end
通过第一个断言并返回到控制台
true
F
Failure:
UsersControllerTest#test_create_with_mobile [/Volumes/SanJuanT/r/market/test/controllers/users_controller_test.rb:29]:
"User.count" didn't change by 1.
因此,未创建记录不是由于验证错误。
如何追踪devise未能创建记录的过程?
更新 日志表示一系列不允许的参数(以上都是,保存密码相关的)。
Processing by Users::RegistrationsController#create as HTML
Parameters: {"user"=>{"mobile"=>"3331112200","name_first"=>"MyString","name_last"=>"MyString","nation_id"=>"1","mobile_nation_id"=>"1",
然而,registrations_controller
有一个用于 sign_up(和更新)强参数的受保护块:
def configure_sign_up_params
devise_parameter_sanitizer.permit({ roleshopusers: [:role_id,:shop_id,:user_id] },:email,:password,:password_confirmation,:mobile,:mobile_nation_id,[...])
before_action :configure_permitted_parameters,if: :devise_controller?
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up,keys: [:email,:mobile [...]
启动一个进程,但回滚
User Exists? [...]
ROLLBACK TO SAVEPOINT active_record_1
因为这是一个测试,我不认为该测试会认为夹具已经存在。
** 解决方案(可能)**
更改对未在灯具中引用的字符串的引用。
post users_url,params: { user: { mobile: ' 3331 91 220 0 ',
日志
User Create (0.5ms)[0m [1m[32mINSERT INTO "users" ("encrypted_password","mobile","mobile_nation_id","login_name","nation_id"[...]
[1m[36mTRANSACTION (0.1ms)[0m [1m[35mRELEASE SAVEPOINT active_record_1
就像模型一样
validates :mobile,uniqueness: { scope: :nation_id,message: (I18n.t('user.define_one_mobile_per_nation')) },if: -> { mobile.present? }
给定的设计有 authentication_keys
必须是唯一的,召回其中一个装置会强制回滚。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。