看看我的服务类似于什么
TestService.initializeDefaults = function() {
var qPromise = $q.defer();
$q.all({localResource : localResource.fetch(),
item : itemResource.fetch()}).then(function(directories){
//stuff happens with directories
$q.all({
thing1 : anotherThingFetch.fetch(),
thing2: someThingFetch.fetch(),
thing3: thingFetch.fetch()
}).then(function(funData) {
//stuff happens with the data
preventiveServicesService.fetch().then(function() {
//stuff happens
});
});
}.bind(this));
return qPromise;
};
我尝试使用业力来测试此initializeDefaults方法中的所有函数是否已运行。这意味着基本上所有的提取都发生了。以下是迄今为止我在测试中工作的内容:
it("should initialize defaults (Scenario 1)", function() {
service.initializeDefaults();
rootScope.$apply();
expect(localResourceMock.fetch).toHaveBeenCalledWith();
expect(itemResourceMock.fetch).toHaveBeenCalledWith();
答案 0 :(得分:0)
有两种方法你可以解决这个问题。
1)使用$ httpBackend:使用类似于$ httpBackend.expectGET(' url1')。响应(200,{})等依赖于您正在制作的所有$ http calss。然后调用$ httpBackend.flush(),它也应该执行所有嵌套的promises。 下行:这将执行被调用方法中的所有逻辑。
2)使用Jasmine间谍:做类似的事情:
let deferred = $q.defer();
deferred.resolve(/*data you expect the promise to return*/);
spyOn(localResourceMock, 'fetch').and.returnValue(deferred.promise);
spyOn(itemResource, 'fetch').and.returnValue(deferred.promise);
spyOn(anotherThingFetch, 'fetch').and.returnValue(deferred.promise);
/*And so on for all methods being invoked*/
// Invoke the method
service.initializeDefaults();
// Trigger digest cycle
rootScope.$digest();
/*Expect all the spies to have been called*/
expect(anotherThingFetch.fetch).toHaveBeenCalledWith(); // will now pass
其中任何一个都可行。你的来电。 欢呼声。