Как работать с тестами и приспособлениями в базе данных с внешними ключами в Rails?

Я использую Rails 4.1 и PostgreSQL и использую гем иностранца для создания ограничений внешнего ключа. Но у меня есть некоторые проблемы со светильниками.

Когда я бегу:

spring rake test

Я получил ошибки, подобные следующим:

ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR:  update or delete on table "pessoas" violates foreign key constraint "pacientes_pessoa_id_fk" on table "pacientes"
DETAIL:  Key (id)=(980190962) is still referenced from table "pacientes".
: DELETE FROM "pessoas"

Я нашел обходной путь: воссоздание базы данных:

RAILS_ENV=test spring rake db:reset && spring rake test

Я получаю некоторые ошибки, когда пытаюсь заполнить базу данных разработки, используя rake db:fixture:load,

Я уже пытался изменить порядок загрузки прибора в test_helper.rb, но этого было недостаточно.

Кто-то знает, как это исправить? Я много искал в сети и не нашел решения.

1 ответ

Итак, я точно знаю, что это работает, хотя я не могу сказать, что это действительно правильная работа.

Вы должны сделать пользователя SUPERUSER.

В моем случае, используя Cloud 9, пользователь, вошедший в систему под именем "Ubuntu".

Я ввожу sudo -u postgres psql (фактически дважды для правильного доступа к C9) и набираю:

ALTER USER Ubuntu SUPERUSER;

Выйти, и это будет работать.

Если вы запустите tail log/test.rb, то при запуске интеграционного теста вы увидите PG::InsufficientPrivlege: ERROR, поэтому у пользователя недостаточно прав. Вы не хотели бы делать это в производстве, но мое производство на Heroku, так что я в порядке.

Другие вопросы по тегам