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();
});
我的控制器具有以下方法,每当创建控制器的新实例时都会调用该方法
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();
});