如何测试从函数返回对象的角度工厂模块?

时间:2018-10-17 03:38:59

标签: javascript angular karma-mocha factories

关键字: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服务,以便可以将其很好地注入到任何控制器中。只需要测试文件的帮助。

0 个答案:

没有答案