Sinon 如何存根 Promise?

Sinon How to stub Promise?

我的控制器具有以下方法,每当创建控制器的新实例时都会调用该方法

initialize: function() {
    var self = this;
    return new View().render().then(function() {
        bus.broadcast("INITIALIZED");
    });
} 

我想测试这个方法:

it("should initialise controller", (done) => {
        bus.subscribe("INITIALIZED", (message, payload) => done());
        new Controller();
    });

如何使用 Sinon.JS 存根 Promise new View().render() 以使此测试工作?

根据您提供的信息...:

it("should initialise controller", (done) => {
    var renderStub = sinon.stub(View.prototype, 'render');
     // for each view.render() call, return resolved promise with `undefined`
     renderStub.returns(Promise.resolve());

    bus.subscribe("INITIALIZED", (message, payload) => done());
    new Controller();

    //make assertions...

    //restore stubbed methods to their original definitions
    renderStub.restore();
});

使用 Sinon v2.3.1,您可以按如下方式进行。

const sinon = require('sinon');
let sandbox;
beforeEach('create sinon sandbox', () => {
  sandbox = sinon.sandbox.create();
});

afterEach('restore the sandbox', () => {
  sandbox.restore();
});

it('should initialize controller', (done) => {
  sandbox.stub(View.prototype, 'render').resolves();

  bus.subscribe("INITIALIZED", (message, payload) => done());
  new Controller();
});