【问题标题】:mocha-phantomjs test case for callback function回调函数的 mocha-phantomjs 测试用例
【发布时间】:2014-04-03 12:02:48
【问题描述】:

我有一个模块,其中有这个功能

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中的回调函数。

【问题讨论】:

    标签: javascript unit-testing callback mocha.js 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测试结束。

    否则,Mocha 将运行给it 的回调并且不会等待handleData 执行。测试将立即结束,没有错误,所以 Mocha 会说它通过了。

    【讨论】:

    • 谢谢它有效。我也做了一些对我有用的改变。 function handleData (photoUrl, done) { assert.equal(photoUrl.stat, "pass", photoUrl.message); this.timeout(2000); setTimeout(done, 1500); };
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多