Тест mocha-phantomjs для функции обратного вызова
У меня есть модуль, в котором у меня есть эта функция
flickrPhotoSearch: function (searchByName, flickrUserKey, numberOfImages, callbackData) {
return $.ajax({
url: commonConstants.BASE_URL + "flickr.photos.search&api_key=" + flickrUserKey + "&tags=" + searchByName + "&format=json&jsoncallback=?",
dataType: 'json',
async: true,
success: function (jsonData) {
if (jsonData.stat === commonConstants.JSON_SUCCESS) {
if (jsonData.photos['photo'].length < commonConstants.DATA_LENGTH) {
callbackData(jsonData);
} else {
var flickrImage = flickrApplication.jsonToImage(jsonData, numberOfImages);
callbackData(flickrImage);
}
} else {
callbackData(jsonData);
}
}
});
}
Я хочу проверить эту функцию, и я выбираю mocha-phantomjs
для этого. И это мой контрольный пример
describe("flickrphotoSearch", function () {
it("should fail with wrong key", function () {
flickrApplication.flickrPhotoSearch(testConstant.CORRECT_NAME, testConstant.WRONG_KEY, testConstant.CONSTANT_ONE, handleData);
function handleData (photoUrl) {
assert.equals(photourl.stat, "pass", photoUrl.message);
}
});
});
Теперь этот тест должен провалиться из-за ошибки "Invalid API Key"
, Но это прошло. Я думаю, это потому, что я использовал утверждение внутри функции обратного вызова, т.е. handleData()
,
я использую mocha-phantomjs
настройка и chai
библиотека утверждений.
Я искал учебники и демонстрации, но не нашел ни одного. Тоже попробовал mocha-phantomjs
примеры, но без посторонней помощи я выкладываю здесь.
Подскажите пожалуйста как проверить функцию обратного вызова в mocha-phantomjs
,
1 ответ
То, что вы описываете, является типичным симптомом для теста, который является асинхронным, но тестируется синхронно. Решение состоит в том, чтобы использовать done
обратный вызов в вашем тесте:
it("should fail with wrong key", function (done) {
flickrApplication.flickrPhotoSearch(testConstant.CORRECT_NAME, testConstant.WRONG_KEY, testConstant.CONSTANT_ONE, handleData);
function handleData (photoUrl) {
assert.equals(photourl.stat, "pass", photoUrl.message);
done();
}
});
Когда вы добавляете done
аргумент обратного вызова, который вы даете it
, вы говорите Mocha, что тест асинхронный, а затем вы должны вызвать его в асинхронном обратном вызове (handleData
здесь), чтобы сказать Мокко, что тест закончен.
В противном случае Mocha запустит обратный вызов, данный it
и не буду ждать handleData
выполнить. Тест закончится сразу же, без ошибок, поэтому Мокко скажет, что он прошел.