如何在 knexfile 上设置另一个数据库进行测试?

How to set another database for test on knexfile?

我有2个数据库;第一个用于开发和生产,第二个用于测试。 knexfile.js:

const config = require('config');

const knexConfig = config.get('knexConfig');

module.exports = {

  development: {
    client: knexConfig.client,
    connection: {
      host: knexConfig.host,
      database: knexConfig.database,
      user: knexConfig.user,
      password: knexConfig.password,
    },
    pool: {
      min: knexConfig.min,
      max: knexConfig.max,
    },
  },
  test: {
    client: 'sqlite3',
    connection: {
      filename: './file.db',
    },
  },
};

route.test.js:

const Model = require('objection').Model;

const provider = require('../../../server/models/provider');
const Knex = require('knex');
const knexConfig = require('../../../knexfile');

const knex = Knex(knexConfig.test);
Model.knex(knex);


describe('Should test provider Model', () => {
  test('should return provider', () => {
    provider
      .query()
      .then((providers) => {
        expect(providers).toBe('array');
      });
  });
});

我收到这个错误:

Test suite failed to run

    ProcessTerminatedError: cancel after 2 retries!

      at Farm.<anonymous> (node_modules/worker-farm/lib/farm.js:87:25)
          at Array.forEach (<anonymous>)
      at Farm.<anonymous> (node_modules/worker-farm/lib/farm.js:81:36)
      at ontimeout (timers.js:469:11)
      at tryOnTimeout (timers.js:304:5)
      at Timer.listOnTimeout (timers.js:264:5)

A worker process has quit unexpectedly! Most likely this is an initialization error.

我想连接到 sqlite 数据库进行测试,但无法通过 tests.How 我可以解决这个问题吗?

您的配置似乎没问题,因为以下测试有效。

https://runkit.com/embed/3w0umojslatc

require('sqlite3');
var knex = require("knex")({
  client: 'sqlite3',
  connection: {
    filename: './db.db' 
  }
})

const { Model } = require('objection');
Model.knex(knex);

await Model.query().select('1');

看起来您正在混合 DBB 和 TDD 语法,并且在从测试返回之前没有等待异步结果的一些错误。

先试试这个:

const Model = require('objection').Model;
const provider = require('../../../server/models/provider');
const Knex = require('knex');
const knexConfig = require('../../../knexfile');

const knex = Knex(knexConfig.test);
Model.knex(knex);


describe('Should test provider Model', () => {
  it('should return provider', () => {
    return Model.query().from('providers')
      .then((providers) => {
        expect(providers).toBe('array');
      });
  });
});

如果可行,请尝试使用您自己的 providers class 进行查询,但您没有包含在问题