关键字:Angular 1.6,Karma,mocha,PhantomJS,javascript
目标是测试此服务。我遇到的错误是Error: [$injector:unpr] Unknown provider: UtilProvider <- Util
。
util.module.js
'use strict';
import angular from 'angular';
import {
UtilService
} from './util.service';
export default angular.module('ssfdataApp.util', [])
.factory('Util', UtilService)
.name;
util.service.js
'use strict';
import angular from 'angular';
import moment from 'moment';
/**
* The Util service is for thin, globally reusable, utility functions
*/
export default function UtilService($window) { // should this be 'export function' instead?
'ngInject';
var Util = {
formatPageTitle(name) {
name = name.replace(/-/g, ' ');
return this.toTitleCase(name);
},
formatDateTime(timestamp) {
if (!timestamp) {
return null;
}
return moment(timestamp).local().format('MM/DD/YYYY h:mmA');
}
return Util;
}
这是我设置测试的尝试。
util.service.spec.js
'use strict';
describe('Service: Util', function() {
var utilService;
beforeEach(inject(function(Util) {
utilService = Util;
}));
describe('Function: formatDateTime', function() {
it('should format a date and time into a local date and time', function() {
expect(utilService.formatDateTime('2017-06-22T00:03:39.580Z')).toEqual('06/21/2017 5:03PM');
});
it('should format a date and time into a local date and time', function() {
expect(utilService.formatDateTime('06/07/2017')).toEqual('06/21/2017 12:00PM');
});
it('should return null if there is no inputted date and time', function() {
expect(utilService.formatDateTime(null)).toBeNull();
});
});
});
我什至尝试跳过module.js并直接转到service.js,调用返回对象的函数,然后使用该对象,但无法使其正常工作。实际上,它破坏了我对Error: [ng:areq] Argument 'fn' is not a function, got undefined
进行的所有其他测试。并且在某一时刻出现了TypeError: Object is not a constructor
错误。
我什至尝试使用import util from './util.module.js';
和beforeEach(angular.mock.module(util));
。
问题:如何设置测试文件以使其成功测试工厂/服务?请在文件顶部提供所有导入,而不仅仅是beforeEach
代码。已在app.js
文件中正确设置了util服务,以便可以将其很好地注入到任何控制器中。只需要测试文件的帮助。