繁体   English   中英

用摩卡柴和西农测试诺言

[英]Testing promises with mocha chai and sinon

我想使用mochachaisinon测试我的promise解析处理程序和promise拒绝处理程序。此外,我已经设置了sinon-chai插件和sinon-stub-promise插件。

这是我的require语句块:

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)

承诺正弦软件包应该适合您要执行的操作。 我遇到了同样的问题(除了我不需要测试拒绝案例),而且效果很好。

这行代码是错误的:

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

called只是间谍的一个属性,其值始终为boolean ,可以使用chai像这样简单地对其进行测试:

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

类似地,代替此行来确认该函数未拒绝:

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

由于采用这种called作为一个属性:

expect(rejectHandler.called).to.equal(false);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM