2

我想使用 和 测试我的承诺解析处理程序和承诺拒绝处理程序。此外mocha,我已经设置了插件和插件。chaisinonsinon-chaisinon-stub-promise

这是我的要求语句块:

var chai = require('chai');
var expect = chai.expect;
var sinonChai = require('sinon-chai');
chai.use(sinonChai);
var sinon = require('sinon');
var sinonStubPromise = require('sinon-stub-promise');
sinonStubPromise(sinon);

这是我的测试套件:

describe('Connect to github users',function(done){

    var api = require('../users'),
        onSuccess = api.onSuccess,
        onError = api.onReject; 
    console.dir(api);
    //the idea is not to test the async connection,the idea is to test 
    //async connection but to test how the results are handled.
    var resolveHandler,
        rejectHandler,
        getPromise,
        result;

    beforeEach(function(){
        resolveHandler = sinon.spy(onSuccess);
        rejectHandler = sinon.spy(onError);
        getPromise = sinon.stub().returnsPromise();
    });

    it('must obtain the result when promise is successful',function(){
        result = [...];//is an actual JSON array    
        getPromise.resolves(result);

        getPromise()
            .then(resolveHandler)
            .catch(rejectHandler);

        expect(resolveHandler).to.have.been.called();//error 
        expect(resolveHandler).to.have.returned(result);
        expect(rejectHandler).to.have.not.been.called();    
        done();
    });

    afterEach(function(){
        resolveHandler.reset();
        rejectHandler.reset();
        getPromise.restore();
    });

});

我发现自己遇到了这个错误:

 Connect to github users must obtain the result when promise is successful:
 TypeError: expect(...).to.have.been.called.toEqual is not a function
  at Context.<anonymous> (C:\Users\vamsi\Do\testing_promises\test\githubUsersSpec.js:94:46)
4

2 回答 2

0

sinon -with-promise包应该适合您正在尝试做的事情。我遇到了同样的问题(除了我不需要测试拒绝案例)并且效果很好。

于 2017-05-29T14:08:36.663 回答
-1

这里的这行代码是错误的:

expect(resolveHandler).to.have.been.called();

called只是spy上的一个属性,其值始终为 a boolean,可以chai像这样简单地测试:

expect(resolveHandler.called).to.equal(true);

同样代替这一行来确认函数没有被拒绝:

expect(rejectHandler).to.have.not.been.called();

将其called用作属性:

expect(rejectHandler.called).to.equal(false);
于 2015-09-05T11:11:29.803 回答