多个异步测试jasmine

时间:2015-08-03 08:09:52

标签: javascript jasmine tdd

自上周以来,我遇到了Jasmine测试的问题。我找到了从哪里来的bug,但我不知道如何解决它。

这里是代码:

it("Test the time of asynchronous call", function(done) {
        var isItDone = false;
        model.setSuccessFnc(function(isItDone) {
            isItDone = true;
            expect(isItDone).toBe(true);
            done();
        });
        model.setId("serviceLevel");
        model.getDataFromBatch("srService", "workItems", query.services, null, filter, null, true);

        setTimeout(function() {
            expect(isItDone).toBe(true);
            done();
        }, 4000);
    });

    it("Test retrieved data of asynchronous call", function(done) {
        // var isItDone = false;
        model.setSuccessFnc(function(oData, oResponse) {
            var json = JSON.parse(oData.__batchResponses[0].body);

            expect(json.d.results.length).toBeGreaterThan(0);
            done();

        });
        model.setId("serviceLevel");
        model.getDataFromBatch("srService", "workItems", query.services, null, filter, null, true);

    });

如果我评论第一个测试,我的第二个测试,如果不是,我有这个错误:

预计错误为真。

对我来说,第二次测试使用第一次"完成"。 我怎么能重置它?

PS:抱歉,我的英语不是我的母语。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

几个笔记:

测试中的

setTimeout不是通常的,jasmine有自己的超时,并且在超时期望是重复的。

如果您使用真正的后端或某些模拟,从样本中可能并不明显。使用$ httpBackend进行模拟响应,您的测试会更快。

首次测试包含错误。回调setSuccessFnc有参数isItDone - 它实际上是局部变量"覆盖" var isItDone在测试开始时定义。

如果调用回调,则回调中的本地isItDone设置为true,并且满足回调期望。

但是超时中的第二个断言与var isItDone一起使用仍然是错误的。

结果取决于更早发生的事情。

这应该有帮助

model.setSuccessFnc(function() {
    isItDone = true;
    expect(isItDone).toBe(true);
    done();
});