#ruby-on-rails #testing #rspec #fixtures
#ruby-on-rails #тестирование #rspec #приспособления
Вопрос:
Я тестирую свой UsersController, который активирует и деактивирует пользователей. Я использую fixtures, и когда я запускаю свои тесты, я вижу ошибку: ActiveRecord::Fixture::FixtureError: в таблице «пользователи» нет столбца с именем «статус». Ту же ошибку я вижу в поле «locale», но в поле «роль» все в порядке, почему?
P.S. Исходные данные работают хорошо
Перенести файл (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
файл fixture (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
seeds.rb:
User.create(
firstname: 'init',
lastname: 'user',
login: 'init',
email: 'example@mail',
genres: 511,
role: 1
)
Комментарии:
1. Обычно я сталкиваюсь с этими проблемами, когда забываю перенести свою тестовую базу данных после добавления новых столбцов. Вы пробовали запускать ‘rake db: migrate RAILS_ENV=test’?
Ответ №1:
Попробуйте удалить столбец
rails g migration removeStatusFromUsers
а затем добавляю его снова.