Rails:为什么post user_registration_path似乎在我的测试中不起作用?

时间:2017-11-19 22:40:16

标签: ruby-on-rails testing

我的用户索引页底部有一个表单,用于添加其他用户。

<%= 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()})

1 个答案:

答案 0 :(得分:0)

尝试更改请求语法。我相信它应该是:

post 'users/registrations', params...

参考:来自docs

的示例