我正在尝试使用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主键,password
文本)-表'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');
};