茉莉花测试功能返回原生承诺

时间:2016-01-26 05:59:38

标签: javascript jasmine promise es6-promise

我正在尝试编写一个jasmine测试用例来测试一个返回promise对象的函数。

我的javascript看起来像这样:

var eventUtil = (function() {
    function ListWidget(config) {
        var el = document.getElementById(config.elementID);
        var promise = new Promise(function(resolve, reject) {
            httpUtil(config.dataURL).get(null).then(function(data) {
                data = JSON.parse(data);
                var events = data.events;
                resolve("success");
            }, function(error) {
                reject("error");
            });
        });
        return promise;
    }
    return {
        listWidget: ListWidget
    }
})()

我的规格如下:

describe("Test suite for events", function() {
    beforeEach(function() {
        var eventList = {};
        document.body.insertAdjacentHTML("beforeend", "<div id='list'></div>");
        spyOn(window, "httpUtil").and.returnValue({
            'get': function() {
                return {
                    then: function(callback) {
                        return callback(eventList);
                    }
                }
            }
        });
    });

    it("shall create event table", function() {
        eventList = `{
            "events": [{
                "name": "A",
            }, {
                "name": "B",
            }, {
                "name": "C",
            }, {
                "name": "D",
            }]
        }`;
        var promise = eventUtil.listWidget({
            elementID: "test",
            dataURL: "js/events.json"
        });
        var listDiv = document.getElementById('list');
        expect(listDiv.innerHTML).toContain('<caption>Events ABC</caption>');
    });

    afterEach(function() {
        var listDiv = document.getElementById('list');
        listDiv.parentNode.removeChild(listDiv);
    });
});

如何测试返回promise对象的函数eventUtil.ListWidget?

1 个答案:

答案 0 :(得分:1)

将可选的done参数传递给它。

{{1}}