在yeoman angularjs中使用模拟文件夹进行业力测试

Som*_*561 8 javascript unit-testing angularjs yeoman karma-runner

我有一个angularjs应用程序,我用自己生成的.在karma.conf.js中是对test/mock/**/*.js的引用.我有麻烦找出来,我如何使用这个文件夹.目前我有一个简单的服务:

'use strict';

angular.module('tvcalApp')
  .factory('Series', function ($resource) {
    return $resource('/search/:search');
  });
Run Code Online (Sandbox Code Playgroud)

和测试

'use strict';

var $httpBackend;

describe('Service: Series', function () {

  // load the service's module
  beforeEach(module('tvcalApp'));

  // instantiate service
  var Series;
  beforeEach(inject(function (_Series_) {
    Series = _Series_;
  }));

  beforeEach(inject(function ($injector) {
      var url_get = '/search/The%20Simpsons';

      var response_get = [{"seriesid": "71663"}];

      $httpBackend = $injector.get('$httpBackend');

      $httpBackend.whenGET(url_get).respond(response_get);

  }));

  it('should return a list if search for The Simpsons', function () {
      var res = Series.query({search: 'The Simpsons'});
      $httpBackend.flush();
        expect(res[0].seriesid === 71663);
      });

});
Run Code Online (Sandbox Code Playgroud)

这很有效.但我想知道如果我可以使用karma.conf.js中的mock文件夹作为模拟函数.是否可以将模拟部分移动到模拟文件夹中并将其用于所有单元测试?

我找不到此文件夹的任何示例或文档.有人可以指点我的示例或文档如何使用模拟文件夹.

ger*_*lus 7

基本上我做了类似于angular-mocks.js的事情:
让我们说app可能叫做ql.我有一个我想模拟的loginService:

mocks/servicesMock.js看起来像这样:

'use strict';

var ql = {};
ql.mock = {};

ql.mock.$loginServiceMockProvider = function() {
  this.$get = function() {
    var $service = {
      login: function() { }
    };
    return $service;
  };
};

angular.module('qlMock', ['ng']).provider({
  $loginServiceMock: ql.mock.$loginServiceMockProvider
});
Run Code Online (Sandbox Code Playgroud)

然后在我的测试中,我可以injeck $ loginServiceMock:

'use strict';

describe('LoginController tests', function () {
  // load the controller's module
  beforeEach(module('ql'));
  // load our mocks module
  beforeEach(angular.mock.module('qlMock'));

  var loginController,
    loginServiceMock,
    scope;

  // Initialize the controller and a mock scope
  // $loginSericeMock will be injected from serviceMocks.js file
  beforeEach(inject(function ($controller, $rootScope, $loginServiceMock) {
    scope = $rootScope.$new();
    loginServiceMock =  $loginServiceMock;
    loginController = $controller('LoginController', {
      $scope: scope,
      loginService: loginServiceMock
    });
  }));
});
Run Code Online (Sandbox Code Playgroud)