自上周以来,我遇到了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:抱歉,我的英语不是我的母语。
感谢您的帮助。
答案 0 :(得分:3)
几个笔记:
测试中的setTimeout不是通常的,jasmine有自己的超时,并且在超时期望是重复的。
如果您使用真正的后端或某些模拟,从样本中可能并不明显。使用$ httpBackend进行模拟响应,您的测试会更快。
首次测试包含错误。回调setSuccessFnc有参数isItDone - 它实际上是局部变量"覆盖" var isItDone
在测试开始时定义。
如果调用回调,则回调中的本地isItDone设置为true,并且满足回调期望。
但是超时中的第二个断言与var isItDone
一起使用仍然是错误的。
结果取决于更早发生的事情。
这应该有帮助
model.setSuccessFnc(function() {
isItDone = true;
expect(isItDone).toBe(true);
done();
});