【问题标题】:Validation failed: Email has already been taken验证失败:电子邮件已被占用
【发布时间】:2015-10-24 15:58:47
【问题描述】:

请注意,我遇到此错误不是在创建用户时,而是在编辑时

我相信电子邮件唯一性的检查可以在devise 内完成。

Github 仓库:https://github.com/tenzan/shop,但 editing_users_spec.rb 还没有。

$ bundle exec rspec spec/features/admin/editing_users_spec.rb
FF

Failures:

  1) Admins can change a user's details with valid details
     Failure/Error: let(:user) {FactoryGirl.create(:user)}
     ActiveRecord::RecordInvalid:
       Validation failed: Email has already been taken
     # ./spec/features/admin/editing_users_spec.rb:5:in `block (2 levels) in <top (required)>'
     # ./spec/features/admin/editing_users_spec.rb:9:in `block (2 levels) in <top (required)>'

  2) Admins can change a user's details when toggling a user's admin ability
     Failure/Error: let(:user) {FactoryGirl.create(:user)}
     ActiveRecord::RecordInvalid:
       Validation failed: Email has already been taken
     # ./spec/features/admin/editing_users_spec.rb:5:in `block (2 levels) in <top (required)>'
     # ./spec/features/admin/editing_users_spec.rb:9:in `block (2 levels) in <top (required)>'

Finished in 0.05535 seconds (files took 2.29 seconds to load)
2 examples, 2 failures

Failed examples:

rspec ./spec/features/admin/editing_users_spec.rb:13 # Admins can change a user's details with valid details
rspec ./spec/features/admin/editing_users_spec.rb:22 # Admins can change a user's details when toggling a user's admin ability

spec/features/admin/editing_users_spec.rb

require 'rails_helper'

RSpec.feature "Admins can change a user's details" do
  let(:admin_user) { FactoryGirl.create(:user, :admin)}
  let(:user) {FactoryGirl.create(:user)}

  before do
    login_as(admin_user)
    visit admin_user_path(user)
    click_link 'Edit User'
  end

  scenario 'with valid details' do
    fill_in 'Email', with: 'newuser@example.com'
    click_button 'Update User'

    expect(page).to have_content 'User has been updated.'
    expect(page).to have_content 'newuser@example.com'
    expect(page).not_to have_content user.email
  end

  scenario "when toggling a user's admin ability" do
    check 'Is an admin?'
    click_button 'Update User'

    expect(page).to have_content 'User has been updated.'
    expect(page).to have_content "#{user.email} (Admin)"
  end
end

【问题讨论】:

    标签: rspec devise capybara factory-bot ruby-on-rails-4.2


    【解决方案1】:

    在您的工厂中为您拥有的用户...

    sequence(:email) { |n| 'test#{n}@example.com' }
    

    应该是……

    sequence(:email) { |n| "test#{n}@example.com" }
    

    n的插值需要双引号

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 2021-12-28
      • 2015-06-15
      • 1970-01-01
      相关资源
      最近更新 更多