微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

rails 6,minitest 和设计有效记录但创建计数不正确

如何解决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 举报,一经查实,本站将立刻删除。