gpt4 book ai didi

javascript - 使用 Sinon.JS 模拟 JavaScript 构造函数

转载 作者:IT老高 更新时间:2023-10-28 22:04:41 26 4
gpt4 key购买 nike

我想对以下 ES6 类进行单元测试:

// service.js
const InternalService = require('internal-service');

class Service {
constructor(args) {
this.internalService = new InternalService(args);
}

getData(args) {
let events = this.internalService.getEvents(args);
let data = getDataFromEvents(events);
return data;
}
}

function getDataFromEvents(events) {...}

module.exports = Service;

如何使用 Sinon.JS 模拟构造函数以模拟 internalServicegetEvents 以测试 getData

我查看了 Javascript: Mocking Constructor using Sinon 但无法提取解决方案。

// test.js
const chai = require('chai');
const sinon = require('sinon');
const should = chai.should();

let Service = require('service');

describe('Service', function() {
it('getData', function() {
// throws: TypeError: Attempted to wrap undefined property Service as function
sinon.stub(Service, 'Service').returns(0);
});
});

最佳答案

您可以使用 sinon.createStubInstance 创建命名空间或创建 stub 实例(这不会调用构造函数)。

创建命名空间:

const namespace = {
Service: require('./service')
};

describe('Service', function() {
it('getData', function() {
sinon.stub(namespace, 'Service').returns(0);
console.log(new namespace.Service()); // Service {}
});
});

创建 stub 实例:

let Service = require('./service');

describe('Service', function() {
it('getData', function() {
let stub = sinon.createStubInstance(Service);
console.log(stub); // Service {}
});
});

关于javascript - 使用 Sinon.JS 模拟 JavaScript 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32550115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com