首页 > 解决方案 > 为什么使用 sinon createStubInstance 进行单元测试成功但挂起?

问题描述

我正在对 fileA.js 中的一个方法进行单元测试,该方法需要来自 fileB.js 的新类实例并成功。

问题是我得到了成功,正如预期的那样,但是这个特定的测试挂起,我没有从伊斯坦布尔得到结果。是的,我已经添加了 --exit 标志。仅当我运行此测试时才会发生这种情况...为什么会挂起?

这是 fileA.js 中的方法:

global.mapperObj = {};
const opts = config.opts
(...)

async function startServices() {
    const data = await getData();

    Object.keys(data).forEach(function(key) {
        mapperObj[key] = new ClassInFileB(key, data[key], opts);
        mapperArray.push(key);
    });
}

fileB.js 中的类:

const npmPool = require('npmPackage');

class ClassInFileB{
    
    constructor(ip, port, opts) {
        this.classPool = npmPool.createPool(ip, port, opts);
    }
    
    (...)
    // other class methods

}

以及对该方法的测试:

const rewire = require('rewire');
const fileA = rewire(`path/to/fileA`);
const ClassInFileB = require(`path/to/fileB`);

describe('Testing startServices() function', function () {
    it('It should not throw errors', async function () {
        let result;
        let error = false;
        global.mapperArray = [];
        
        try {
            function getDataMock() {
                return { '0.0.0.1': 'thisIsSomething'};
            }
            fileA.__set__('getData', getDataMock);

            // Create a stub instance to ClassInFileB class avoiding the constructor
            sinon.createStubInstance(ClassInFileB);

            result = await fileA.startServices();
        } catch (err) {
            error = err;
        }
        expect(error).to.be.false;
    });

标签: javascriptunit-testingmocha.jschaisinon

解决方案


推荐阅读