多个异步测试茉莉花

Multiple async test jasmine

从上周开始我就遇到了 Jasmine 测试的问题。我发现这个问题是从哪里来的,但我不知道如何解决它。

这里是代码:

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);

    });

如果我对第一个测试发表评论,我的第二个测试就会成功,否则我会出现此错误:

预期为假。

对我来说,第二个测试使用第一个 "done"。 我该如何重置它?

PS : 对不起,我的英语不是我的母语。

感谢您的帮助。

几个注意事项:

test中的setTimeout不正常,jasmine有自己的timeout和expect in timeout是重复的。

如果您使用真实后端或一些模拟,则从示例中看不出明显。使用 $httpBackend 进行模拟响应,您的测试会更快。

第一个测试包含错误。回调 setSuccessFnc 有参数 isItDone - 它实际上是在测试开始时 "override" var isItDone 定义的局部变量。

如果回调被调用,回调中的局部isItDone被设置为true并且回调中的期望被实现。

但是超时中的第二个断言与 var isItDone 一起工作,这仍然是错误的。

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

这应该有帮助

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