在我的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">
所以我认为用户名已经存在。
任何人都知道如何解决这个问题?
鲁洛夫
答案 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
的结果。