knex.js-动态架构名称的迁移失败

时间:2019-02-06 15:20:39

标签: node.js knex.js ava

环境

  • 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”失败
  迁移失败并出现错误:创建表usersid int无符号,不为空auto_increment主键,email varchar(255),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');
};

0 个答案:

没有答案