2017-01-16 103 views
0

我有以下方法控制每當創建Sinon如何存根承諾?

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使這個測試工作?

回答

1

基於信息您提供...:

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(); 
}); 
0

隨着興農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(); 
});