【发布时间】:2017-12-11 18:50:43
【问题描述】:
我正在尝试发布身份验证方法:
post :authenticate, params:
{ 'email' => @user.email, 'password' => @user.password }
此用户创建于before(:each)
before(:each) do
@user = User.create([
{ name: 'Robot', email: 'robot@email.com', password: '123456', age: 10 }
])
end
但 Rspec 将电子邮件和密码视为方法,我收到此错误
NoMethodError:
undefined method `email' for #<Array:0x00559ddd541d18>
如果我更改 @user.email and @user.password 以串通测试。
我想知道我是否可以告诉 Rspec 将 .email 和 .password 视为用户属性而不是方法。
【问题讨论】:
-
@user的值是多少? -
@LucasAndrade ,您在哪里以及如何为 Rspec 定义用户实例?你还在Rspec旁边使用工厂女孩吗?该错误表明对用户实例的查询没有给您返回单个实例(即:查找),而是给您一个数组(即:哪里)。有机会时请出示代码。如果可能,请在 before 块中显示您如何创建用户的代码以及整个测试文件。
-
@kparekh01 我在每个之前添加了我的。我现在明白了,我正在创建一个用户数组,所以我需要使用 @user[0].email @user[0].password
-
您的方式当然可行,但无需制作数组,只需将下面的答案应用到您的 before 块中,您就可以上路了。不过很高兴你想通了。
标签: ruby-on-rails ruby testing rspec ruby-on-rails-5