【问题标题】:Unit testing service doesn't inject Factory单元测试服务不注入工厂
【发布时间】:2015-11-23 10:27:03
【问题描述】:

我是 jasmine单元测试新手,在尝试使其正常工作时遇到了一些问题。我正在使用yeoman 生成的项目,使用gulp-angular 生成器。

我有一个服务:

export class AuthService {
   constructor (FactoryAppStateService) {
    'ngInject';

    this.FactoryAppStateService = FactoryAppStateService;
    this.test = 'toto';
  }

  login (loginInfos) {
    var user = {
        'userName' : loginInfos.username,
        'token' : 'token'
    }
    var credentials = {
      'cientId' : 'testFromService',
      'clientSecret' : 'testFromService'
    }
    this.FactoryAppStateService.setUser(user);
    this.FactoryAppStateService.setClientId(credentials.clientId);
    this.FactoryAppStateService.setClientSecret(credentials.clientSecret);
    this.test = 'tata';
    return user.token;
  }

  getTest () {
    return this.test;
  }
}

还有一个测试:

describe('service Auth', () => {
  // load the service's module
  beforeEach(angular.mock.module('monNotaireFront'));

  it('should do something', function () {
    var service;

    angular.mock.inject(function GetDependencies(AuthService) {
      service = AuthService;
    });

    expect(service.getTest()).toBe('tata');
  });
});

我得到了这个错误:

PhantomJS 1.9.8 (Windows 7 0.0.0) service Auth 应该做点什么 失败的 错误:[$injector:unpr] 未知提供者:FactoryAppStateServiceProvider http://errors.angularjs.org/1.4.7/$injector/unpr?p0=FactoryAppStateServiceProvider%20%3C-%20FactoryAppStateService%20%3C-%20AuthService 在 C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular/angular.js:4289 在 getService (C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular/angular.js:4437) 在 C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular/angular.js:4294 在 getService (C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular/angular.js:4437) 在调用(C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular/angular.js:4469) 在实例化(C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular/angular.js:4486) 在 C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular/angular.js:4346 在调用(C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular/angular.js:4478) 在强制返回值(C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular/angular.js:4330) 在调用(C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular/angular.js:4478) 在 C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular/angular.js:4295 在 getService (C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular/angular.js:4437) 在调用(C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular/angular.js:4469) 在 workFn (C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular-mocks/angular-mocks.js:2438) 在 C:/Users/gayard/Documents/Dev/monnotaire-angularjs/bower_components/angular-mocks/angular-mocks.js:2410 在 C:/Users/gayard/Documents/Dev/monnotaire-angularjs/.tmp/serve/app/index.module.js:9

而且我不知道为什么我的服务使用的工厂不能被注入。 我之前尝试过像这样的不同解决方案:

describe('service Auth', () => {
  beforeEach(angular.mock.module('monNotaireFront'));

  let AuthService;

  beforeEach(inject((_AuthService_) => {
    AuthService = _AuthService_;
  }));

  it("should return tata", () => {
    AuthService.login({username : 'test'});
    expect(AuthService.getTest()).toEqual('tata');
  });

});

但是发生了同样的错误。
请解释可能是什么原因?

【问题讨论】:

  • 这段代码在浏览器上是否也会失败?还是只在考试中?

标签: javascript angularjs unit-testing karma-jasmine


【解决方案1】:

问题解决了!这是对 FactoryAppStateService 的错误声明。简单来说,而不是

angular.module([]).factory('FactoryAppState', (localStorageService) => {return new FactoryAppState(localStorageService)})

我在做

angular.module([]).factory('FactoryAppState', FactoryAppState)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-22
    • 2020-11-20
    • 1970-01-01
    • 2019-06-29
    • 2012-08-31
    • 2017-06-13
    • 1970-01-01
    • 2012-12-23
    相关资源
    最近更新 更多