【发布时间】:2017-03-07 00:33:07
【问题描述】:
我正在测试我的 UsersController,它可以让用户激活和停用。 我正在使用固定装置,当我开始测试时,我看到了错误: ActiveRecord::Fixture::FixtureError: 表“用户”没有名为“状态”的列。 我在“locale”字段上看到了同样的错误,但在“role”字段上,一切都很好,为什么?
附:种子效果很好
迁移文件(db/migrate/20160915110112_create_users.rb):
class CreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
t.string :firstname, null: false
t.string :lastname, null: false
t.string :email, null: false
t.string :login, index: true, null: false
t.string :password, null: false
t.integer :genres, null: false
t.integer :role, null: false
t.integer :status, null: false
t.integer :locale, null: false
t.datetime :created_at, null: false
end
end
end
用户模型(app/models/user.rb):
class User < ApplicationRecord
validates :login, presence: true, uniqueness: true
validates :email, presence: true, uniqueness: true
validates :genres, presence: true, numericality: true
validates :role, presence: true
enum status: { activated: 1, deactivated: 2 }
enum locale: { ru: 1, en: 2 }
enum role: { creator: 1, admin: 2 }
before_create do
self.firstname.capitalize!
self.lastname.capitalize!
self.password = password_generate
self.status = :activated
self.locale = :ru
end
...
private
def password_generate
@password = SecureRandom.base64(8)
BCrypt::Password.create(@password)
end
end
夹具文件(spec/fixtures/users.yml):
alex_foo:
id: 1
firstname: Alex
lastname: Foo
email: alex@foo.com
login: foo
password: $2a$10$E5lj6OpvHwJ4ry3zHt7QrOl0cYgeuWwbvSKXtNZeGAvPIxRVnKnmW
genres: 46
role: 1
status: 1
locale: 1
created_at: 2016-10-19 08:16:07.539325
li_huan:
id: 2
firstname: Li
lastname: Huan
email: li@huan.chi
login: huan
password: $2a$10$E5lj6OpvHwJ4ry3zHt7QrOl0cYgeuWwbvSKXtNZeGAvPIxRVnKnmW
genres: 54
role: 2
status: 1
locale: 1
created_at: 2016-10-19 08:16:07.539325
种子.rb:
User.create(
firstname: 'init',
lastname: 'user',
login: 'init',
email: 'example@mail',
genres: 511,
role: 1
)
【问题讨论】:
-
我通常会在添加新列后忘记迁移测试数据库时遇到这些问题。您是否尝试过运行“rake db:migrate RAILS_ENV=test”?
标签: ruby-on-rails testing rspec fixtures