我的用户索引页底部有一个表单,用于添加其他用户。
<%= form_with model: @user, url: user_registration_path do |form| %>
<%= form.text_field :email, id: :email, class: :email %>
<%= form.password_field :password, id: :password, class: :password %>
<%= form.password_field :password_confirmation, id: :password_confirmation, class: :password_confirmation %>
<%= form.submit %>
<% end %>
从手动尝试,我可以看到它的工作原理。在控制台中,我可以看到其他用户被添加到数据库中。
但是我的测试失败了!
test "additional users can be created" do
post user_registration_path, params: {user: {
email: "new_user123@test.com",
password: "password",
password_confirmation: "password"
}}
follow_redirect!
assert_equal @initial_user_count+1, User.count
end
用户数量保持不变。
Expected: 2
Actual: 1
放入调试器,我发现没有添加其他用户。通过将binding.pry
放在Users::RegistrationsController#create
的顶部进一步调查,我发现测试甚至没有调用#create
,而在浏览器中使用表单时会调用它。我还在binding.pry
中的Users::RegistrationsController
之前添加了user_registration_path
。同样,当在浏览器中使用表单而不是在测试中时,将调用该操作。我很困惑!
在这两个实例中,我都使用完全相同的参数发布到#create
,但有些事情阻止了在测试期间调用 user_registration PATCH / users/registrations#update
PUT / users/registrations#update
DELETE / users/registrations#destroy
POST / users/registrations#create
方法。我在测试中使用的电子邮件地址是唯一的 - 它不会出现在灯具中 - 并且'密码'是合法密码。
我花了太多时间坚持这个。我不知道测试是否有效,代码是否被破坏,反之亦然。有什么明显的我做错了。为什么不在测试中发帖?
如果有帮助,这是我的用户注册路线:
#data from @Alexey
d1 = {
"data":{
0: {
"tag": "importanttagone",
"value": 233
},
1: {
"tag": "importanttagtwo",
"value": 234
}
}
}
d2 = {
"data":{
0: {
"tag": "importanttagone",
"name": "Important Tag One"
},
1: {
"tag": "importanttagtwo",
"name": "Important Tag Two"
}
}
}
print({item.get('value'):sub_item.get('name') for item in d1['data'].values()for sub_item in d2['data'].values()if item.get('tag') in sub_item.values()})