我有一个模块,其中有一个函数
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中测试回调函数。
发布于 2014-04-03 15:53:23
您所描述的是异步测试的典型症状,但测试是同步的。解决方案是在测试中使用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测试已经结束。
否则,Mocha将运行提供给it的回调,而不会等待handleData执行。测试将立即结束,没有错误,所以Mocha会说它已经通过了。
https://stackoverflow.com/questions/22837124
复制相似问题