首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用Sinon.JS模拟JavaScript构造函数

用Sinon.JS模拟JavaScript构造函数
EN

Stack Overflow用户
提问于 2015-09-13 21:24:59
回答 1查看 28.7K关注 0票数 32

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

代码语言:javascript
复制
// 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,但无法提取出解决方案。

代码语言:javascript
复制
// 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);
  });
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-13 23:41:11

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

创建命名空间的

代码语言:javascript
复制
const namespace = {
  Service: require('./service')
};

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

创建存根实例的

代码语言:javascript
复制
let Service = require('./service');

describe('Service', function() {
  it('getData', function() {
    let stub = sinon.createStubInstance(Service);
    console.log(stub); // Service {}
  });
});
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32550115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档