javascript - ES2016 类,Sinon Stub 构造函数

标签 javascript node.js mocha.js sinon babeljs

我正在尝试用 sinon 和 es2016 消除一个 super 调用,但我运气不佳。任何想法为什么这不起作用?

运行 Node 6.2.2,这可能是其类/构造函数实现的问题。

.babelrc 文件:

{
  "presets": [
    "es2016"
  ],
  "plugins": [
    "transform-es2015-modules-commonjs",
    "transform-async-to-generator"
  ]
}

测试:

import sinon from 'sinon';

class Foo {
  constructor(message) {
    console.log(message)
  }
}

class Bar extends Foo {
  constructor() {
    super('test');
  }
}

describe('Example', () => {
  it('should stub super.constructor call', () => {
    sinon.stub(Foo.prototype, 'constructor');

    new Bar();

    sinon.assert.calledOnce(Foo.prototype.constructor);
  });
});

结果:

test
AssertError: expected constructor to be called once but was called 0 times
    at Object.fail (node_modules\sinon\lib\sinon\assert.js:110:29)
    at failAssertion (node_modules\sinon\lib\sinon\assert.js:69:24)
    at Object.assert.(anonymous function) [as calledOnce] (node_modules\sinon\lib\sinon\assert.js:94:21)
    at Context.it (/test/classtest.spec.js:21:18)

注意:这个问题似乎只发生在构造函数中。我可以毫无问题地监视从父类继承的方法。

最佳答案

由于 JavaScript 实现继承的方式,您需要 setPrototypeOf 子类。

const sinon = require("sinon");

class Foo {
  constructor(message) {
    console.log(message);
  }
}

class Bar extends Foo {
  constructor() {
    super('test');
  }
}

describe('Example', () => {
  it('should stub super.constructor call', () => {
    const stub = sinon.stub().callsFake();
    Object.setPrototypeOf(Bar, stub);

    new Bar();

    sinon.assert.calledOnce(stub);
  });
});

关于javascript - ES2016 类,Sinon Stub 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40271140/

相关文章:

javascript - 如何在 jquery jquery mobile 中的每一行上创建复选框?

javascript - 使用谷歌地图 setIcon 时如何更改标记大小

javascript - Rails 和元素特定的 javascript

performance - Apache 后面的 node.js 是否比 node.js HTTP 服务器慢得多?

typescript - 纽约市( Istanbul 尔)从覆盖率报告中排除测试代码

javascript - 还有另一种方法可以优化这种冒泡排序吗?

javascript - learnyounode 文件服务器 为什么要把 createReadStream() 放在 createServer() 里面?

javascript - 使用socket.io与其他javascript文件nodejs和express发送和获取数据

javascript - Mocha 梦魇 : Uncaught TypeError: Cannot read property 'apply' of undefined

Node.js Mocha Sequelize Error 连接管理器关闭后调用ConnectionManager.getConnection