0

私の 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'

与えられたユーザー「Aslak」の存在は次のようになります。

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">

したがって、ユーザー名が存在しているように見えます。

誰でもこれを解決する方法を考えていますか?

ロエロフ

4

2 に答える 2

0

rake db:test:clone既存の移行を編集し、変更をテスト データベースに反映するために実行するのを忘れた可能性はありますか?

rails c別のデータベースを使用する開発で実行されます。代わりUser.firstに実行後の結果を確認してください。rails c test

于 2012-11-06T21:32:37.583 に答える
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
于 2012-11-06T18:31:35.640 に答える