Среда
- Версия Knex: knex@0.16.3
- База данных + версия: MySQL 5.7.24
- ОС: Linux (Manjaro)
Ошибка
Я пытаюсь настроить комплект интеграционных тестов, используя ava
.Как известно, ava
порождает разные процессы Node для каждого тестового файла.
Чтобы изолировать тесты, мне нужно заново создать базу данных и запустить миграции во всех тестовых файлах.Я запустил начальную загрузку и получил следующий скрипт:
import test from 'ava';
import cuid from 'cuid';
import knexFactory from 'knex';
import knexFile from './knexfile';
const knex = knexFactory(knexFile.development);
test.before(async t => {
const schemaName = `foo_${cuid()}`;
await knex.raw(`CREATE SCHEMA ${schemaName}`);
try {
await knex.migrate.latest({ schemaName });;
} catch (err) {
}
Object.assign(t.context, { schemaName });
});
test.after.always(async t => {
const { schemaName } = t.context;
await knex.raw(`DROP SCHEMA ${schemaName}`);
});
test('foo', () => {})
Однако я сталкиваюсь со следующей ошибкой:
файл миграции "20190205110315_create_users_table.js" не удалось
миграцияошибка с ошибкой: создать таблицу users
(id
int без знака, не ноль, первичный ключ auto_increment, email
varchar (255), password
text) - Таблица 'users' уже существует
Происходит следующее: вызов .migrate.latest()
игнорирует параметр schemaName
и работает с конфигурацией, определенной в файле knexfile.js
, то есть с фактической базой данных.
Файл миграции довольно прост:
exports.up = function(knex, Promise) {
return knex.schema.createTable('users', table => {
table.increments();
table.string('email');
table.text('password');
})
};
exports.down = function(knex, Promise) {
return knex.schema.dropTable('users');
};