代码之家  ›  专栏  ›  技术社区  ›  Slim

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

  •  0
  • Slim  · 技术社区  · 7 年前

    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',
        },
      },
    };
    

    路线测验js:

    常量模型=要求(“反对”)。模型

    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数据库进行测试,但我无法通过测试。我怎样才能解决这个问题?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Mikael Lepistö    7 年前

    您的配置似乎很好,因为下面的测试有效。

    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 你没有包括在问题中的类