用户名存在的未知属性用户名

时间:2012-11-06 18:27:20

标签: ruby-on-rails-3 devise cucumber

在我的rails项目中,我尝试使用devise gem从电子邮件登录到用户名登录。 到目前为止,我做了所有的步骤,但是当我做黄瓜时,我看到了这个输出:

Given a user "Aslak" exists         
# features/step_definitions/login_steps.rb:16
  unknown attribute: username (ActiveRecord::UnknownAttributeError)
  ./features/step_definitions/login_steps.rb:17:in `/^a user "(.*?)" exists$/'
  features/login.feature:4:in `Given a user "Aslak" exists'

给定用户 - 阿拉克存在看起来像这样:

Given /^a user "(.*?)" exists$/ do |user_name|
  @user = User.create!(:username => user_name, :password => "s3cr3t")
end

但是当我做导轨c

u = User.first 

我看到了这个输出:

=> #<User id: 1, email: "aslak@tamarawobben.nl", encrypted_password: "$2a$10$XjYgPtD4Ol4/sEpe934O6.yPcxs.jBF.m9SNTV.qhJp4...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 3, current_sign_in_at: "2012-11-05 20:27:44", last_sign_in_at: "2012-11-05 19:35:00", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", created_at: "2012-11-03 20:21:54", updated_at: "2012-11-06 07:58:36", username: "asLak">

所以我认为用户名已经存在。

任何人都知道如何解决这个问题?

鲁洛夫

2 个答案:

答案 0 :(得分:0)

似乎你需要比较不区分大小写,而ruby默认情况下比较区分大小写。这应该可以解决你的问题:

Given /^a user "(.*?)" exists$/ do |user_name|
    @user = User.create!(:username => user_name.downcase! , :password => "s3cr3t")
end

您在运行测试之前是否正在运行迁移(下面)?

env RAILS_ENV=test rake db:migrate

答案 1 :(得分:0)

您是否有可能编辑现有迁移并忘记运行rake db:test:clone以将更改传播到测试数据库?

rails c在开发中运行,它使用另一个数据库。改为运行User.first后检查rails c test的结果。

相关问题