Я пытаюсь создать тестовый пример с Mocha, но мой код является асинхронным.Ошибка обработчика ошибки асинхронного мокса
Это нормально, я могу добавить функцию «done» callback к «it», и это будет отлично работать для положительных случаев. Но, пытаясь проверить отрицательные случаи, он просто сделает тест неудачным.
Я хотел бы сделать что-то подобное, но асинхронные:
someObject.someMethod(null).should.equal(false)
Вместо этого я могу только тест для обратного вызова, чтобы вернуться, вместо того, чтобы испытывать то, что на самом деле случилось (нуль не действует):
it('this should return false or an error', function(done) {
someObject.someMethod(null, '', done);
});
Я хотел бы написать что-то вроде этого:
it('this should return false or an error', function(done) {
someObject.someMethod(null, '', done).should.throw();
});
, но это привело бы к этой ошибке:
"TypeError: Cannot read property 'should' of undefined"
Я также попытался с помощью рассчитывать и утверждать, но одни и те же правила.
Любые подсказки? Благодаря
EDIT # 1:
Я безуспешно пытался:
Использование истина/ложь
return (true); // ok
retur (false); // error
Использование обратного вызова:
callback(); // ok
callback(err); // error
Использование callback2:
callback(true); // ok
callback(false); // error
Использование callback3:
callback(null); // ok
callback(new Error()); // error
Использование броска (также внутри TRY/поймать блок):
// a
throw new Error();
callback();
// b
throw new Error();
callback(new Error());
// c
throw new Error();
callback(false);
Я также попытался несколько комбинаций, таких как возвращение и вызов функции обратного вызова, возвращение на успех, но бросание или вызов обратного вызова при ошибке и обратно.
EDIT # 2:
it('should throw', function(done) {
(function(done) {
someObject.someMethod(null, '', done)
}).should.throw();
});`
EDIT # 3:
Завернуть на тестовой стороне:
it('this should return false or an error', function(done) {
someObject.someMethod(null, function(err, value) {
expect(value === false || err instanceof Error).toEqual(true);
return done();
});
});
И на кодовой стороне: функции (вар, обратного вызова)
...
callback(new Error('your comments'), false);
// or
callback(new Error('your comments'));
...
// if successful:
callback();
// or
callback(null);
// or
callback(null, 'foo');
Как вы выбрасываете ошибку? –
Я отредактировал вопрос, чтобы ответить на это, но я попробовал несколько комбинаций броска, ошибки, возврата ... – nico