我有以下Jasmine单元测试:
describe('myService', function () {
var myService, $q;
// Instantiate the app
beforeEach(module('myApp'));
beforeEach(inject(function (_myService_, fileSystemService, $q) {
myService = _myService_;
spyOn(fileSystemService, 'listFiles').and.callFake(function () {
var deferred = $q.defer();
deferred.resolve('mockresult');
return deferred.promise;
});
}));
it('checks the number of outbound files', inject(function ($rootScope) {
var result;
myService.sendOutboundFiles2().then(function (res) {
result = res;
});
$rootScope.$digest();
expect(result).toBe('mockresult');
}));
});
测试这个非常简单的服务功能:
sendOutboundFiles2() {
return fileSystemService.listFiles('Cached/Outbound').then(function(outfiles) {
return outfiles;
})
}
然而,当测试运行时,它失败并出现虚假的Error: Unexpected request: GET blah\blah\blah.html No more request expected at $httpBackend
错误,但我不知道为什么这个测试和服务依赖都没有对$ httpBackend做任何事情。
更多信息
因此,根据我添加或删除的测试,GET
错误中的HTML文件会发生变化。但是所有的控制器测试运行良好。 WTF?!?!?!??!?!?
答案 0 :(得分:0)
问题是由Ionic将所有模板强烈预取到缓存中引起的。不知道为什么在测试控制器时不会发生这种情况。该问题仅在我测试服务时出现。无论如何,我找到了这个帖子:Karma test breaks after using ui-router,相关的修复方法是在注入任何依赖项之前添加这些片段:
beforeEach(module(function($provide) {
$provide.value('$ionicTemplateCache', function(){} );
}));
这会截断$ ionicTemplateCache并阻止它尝试将所有ui-router模板预加载到Ionic缓存中。