Я хотел бы, чтобы проверить мое обещание обработчика решительности и обещает обработчик отбраковки с помощью mocha
, chai
и sinon
.Кром того, я получил sinon-chai
плагина и sinon-stub-promise
плагина настроить.тестирования обещает с мокко Chai и Синоном
Это мой блок требуют заявлений:
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)
Являются ли пропущенные обещания синхронными? – Bergi
Реализация является «thenable», которая может быть привязана ко всему, что имеет «то», включая «реальное обещание», которое я бы не хотел делать, поэтому я использую 'resolves' и' rejects' для проверки только обработчика. Я попробовал это после просмотра [этого видео] (https://youtu.be/HHcEjAQ46Io?t=2213), где он фиксирует аргументы для обратного вызова jQuery ajax, – vamsiampolu
Да, я просто подумал, что вы ожидаете, что обработчики будут вызваны правильно после того, как вы их приложили. Обычные обещания потерпят неудачу. – Bergi