Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails 6,小型测试和设计有效记录,但创建的计数不正确_Ruby On Rails_Devise_Minitest - Fatal编程技术网

Ruby on rails rails 6,小型测试和设计有效记录,但创建的计数不正确

Ruby on rails rails 6,小型测试和设计有效记录,但创建的计数不正确,ruby-on-rails,devise,minitest,Ruby On Rails,Devise,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_mobi

以下测试:

  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.
因此,不创建记录不是由于验证错误

在这个过程中,Desive怎么能追踪到没有创造记录的那一点呢

更新 日志指示一系列未经许可的参数(以上所有参数都与密码相关)

然而,
注册\u控制器
有一个用于注册(和更新)强参数的受保护块:

def configure_sign_up_params
  devise_parameter_sanitizer.permit({ roleshopusers: [:role_id, :shop_id, :user_id] }, :email, :password, :password_confirmation, :mobile, :mobile_nation_id, [...])
在designe自述文件中也建议将这些参数添加到另一种惰性方法中

before_action :configure_permitted_parameters, if: :devise_controller?

def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:email, :password, :password_confirmation, :mobile [...]
启动进程,但回滚

User Exists? [...]
ROLLBACK TO SAVEPOINT active_record_1

这是一个测试,我不认为测试会考虑一个已经存在的设备。

**解决方案(可能)**

将引用更改为装置中未引用的字符串

post users_url, params: { user: { mobile: ' 3331 91 220 0 ',
日志

正如模特所做的那样

validates :mobile, uniqueness: { scope: :nation_id, message: (I18n.t('user.define_one_mobile_per_nation')) }, if: -> { mobile.present? }

鉴于Desive具有必须唯一的
身份验证密钥
,调用其中一个装置将强制回滚。

我建议查看测试日志。您是否确定正在创建用户?正确;我瞎了眼睛。仍然很奇怪,因为当未经许可的参数位于受保护的注册\u控制器块'def configure\u sign\u params designe\u parameter\u sanitizer.permit({roleshousers:[:role\u id,:shop\u id,:user\u id]},:email,:password,:password\u confirmation,:mobile,:mobile\u nation\u id,`如果您在编辑问题和提供更多信息方面仍有困难,欢迎帮助进一步更新问题。回滚通常表示验证失败。解决此问题的方法可能是在调用save或crea后在控制器中放置断点te和检查错误,例如@user.errors
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? }