[英]Testing js promises with Mocha, Chai, chaiAsPromised and Sinon
[英]Testing promises with mocha chai and sinon
我想使用mocha
, chai
和sinon
测试我的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.