2016-10-26 2 views
0

У меня есть библиотека, написанная для узла. Он содержит кучу кода, который можно использовать для нескольких проектов. Я хотел бы написать несколько тестов для этого, используя Mocha, однако я не знаком с тем, как правильно его протестировать.Тестирование библиотеки в узле

Например, код в одном файле в проекте под названием databaseManager.js экспортируется следующим образом:

module.exports = { 
    // properties 
    connections: connections, 
    // functions 
    loadConnections: loadConnections, 
    getDefaultConnection: getDefaultConnection, 
    clearAllConnections: clearAllConnections 
}; 

Как вы можете предсказать, loadConnections() проверяет и добавляет один или несколько соединений, как когда-то, что может быть достигнуто с помощью connections Недвижимость.

В моем тестовом файле, I require(databaseManager). Но для каждого теста it я хотел бы иметь «свежий» экземпляр для тестирования добавления одного или нескольких хороших или плохих объектов конфигурации. Тем не менее, требуется кэшировать файл, так что каждый тест добавляет к тому же «singleton», создавая ложноположительные ошибки.

Например:

describe('Database Manager Tests', function() { 
    let singleValidConfig = { 
     name: "postgresql.dspdb.postgres", 
     alias: "pdp", 
     dialect: "postgres", 
     database: "dspdb", 
     port: 5432, 
     host: "localhost", 
     user: "postgres", 
     password: "something", 
     primary: false, 
     debugLevel: 2 
    }; 

    it('load 1', function() { 
     (function() { dbman.loadConnections(singleValidConfig, true); }).should.not.throw(); 
     console.log('load 1', dbman); 
    }); 

    it('load 2', function() { 
     let result = dbman.loadConnections(singleValidConfig, false); 
     result.should.be.true; 
     console.log('load 2', dbman); 
    }); 
}); 

Один потерпит неудачу, потому что они оба добавить один и тот же конфигурации к одному экземпляру dbman, которая охраняется против. Как я могу убедиться, что у каждого it есть чистая недвижимость connections?

+0

Вы можете использовать крюк 'before' для настройки среды тестирования. Вы можете использовать одну функцию 'before' для каждой функции' describe', а также 'after' для очистки среды тестирования. – Marcs

ответ

0

Образец, который я вижу для этого, вместо экспорта одного объекта, экспортирует фабричную функцию, используемую для создания уникальных экземпляров. Например, когда вы require('express'), который является заводской функцией, которую вы можете назвать, сколько раз вам нужно выплевывать независимые экземпляры экспресс-приложений. Вы можете сделать это по этим линиям:

// This is a function that works the same with or without the "new" keyword 
function Manager() { 
    if (!(this instanceof Manager)) { 
    return new Manager() 
    } 
    this.connections = [] 
} 

Manager.prototype.loadConnections = function loadConnections() { 
    // this.connections = [array of connections] 
} 

Manager.prototype.getDefaultConnection = function getDefaultConnection() { 
    // return this.defaultConnection 
} 
Manager.prototype.clearAllConnections = function clearAllConnections() { 
    // this.connections = [] 
} 

module.exports = Manager 

Чтобы использовать этот шаблон:

const myManager = require('./db-manager')(); 
Смежные вопросы