:
results = [];
results.push(slowOpA());
results.push(slowOpB());
results.push(slowOpC());
results = _.flatten(results);
$.when.apply($, results).then(onComplete).fail(onError).always(function() {
$(document).trigger('stop')
});
것은 내가이 먼저 모든 slowOp * 메소드를 호출 기대를 그런 다음 onComplete
또는 onError
을 정확히 한 번 호출하고 마지막으로 always
을 정확히 한 번 호출합니다. 때때로
@stopSpy = jasmine.createSpy '<stopSpy>'
$(document).bind 'stop', @stopSpy
...
@lastPromise = new $.Deferred()
spyOn('slowOpA').andReturn new $.Deferred().resolve()
spyOn('slowOpB').andReturn new $.Deferred().resolve()
spyOn('slowOpC').andReturn @lastPromise
...
@lastPromise.resolve()
expect(@stopSpy).toHaveBeenCalledOnce()
99 100 배 밖으로 작동하지만를하고 대신 2 ~ 3 통화를 가져옵니다 : 그래서 내가 재스민과 테스트 무엇
Expected spy on <stopSpy> to have been called once, but was called '2' times
내가 뭔가를 놓치고 있습니까? 또는 jQuery/Jasmine에서이 부분이 불분명 한 경쟁 조건입니까?
나는 같은 결론을 내 렸습니다. 문제는 코드가 아니라 어떻게 든 출혈하는 것입니다. 우리가 처음 Jasmine이 이런 일을하는 것을 본 적이 없습니다. *한숨* – jpatokal