javascript - 为什么使用 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;
});
解决方案
推荐阅读
- java - 动态更改初始屏幕的背景颜色
- nginx - Nginx Plus API 后端服务器排空模式
- excel - 删除数组中每个工作簿的用户窗体和模块
- php - PHP联系表单错误发送电子邮件
- c# - 将数组重新缩放为较小的数组,保留平均值
- android - java.lang.ClassNotFoundException: android.view.View$OnUnhandledKeyEventListener
- ruby-on-rails - 为什么活动存储会抛出此错误:nil:NilClass 的未定义方法“上传”,当对象不是 nil 时
- node.js - docker Cannot find module 'Sequelize'
- python - 如何使用 PyQt5 更改表格中的单元格宽度
- bash - 在bash的for循环中迭代两个值