模拟 AngularJS 1 服务时出错

Getting error when mocking an AngularJS 1 service

当我测试这段代码时(来自书籍:Angularjs 服务,作者:Jim Lavin)

describe("authentication service", function(){
  var data;
  var service;
  var q;
  var deferred;
  var rootScope;

  angular.module('test.data', []).factory('data_service', 
      function (q) {
      data = {
          retrieveUser: function (email) {
              deferred = q.defer();
              return deferred.promise;
          }
      };

      return data;
  });

  beforeEach(module('application.services'));
  beforeEach(module('test.data'));

  beforeEach(inject(function (authenticate data_service, $rootScope, $q) {
      rootScope = $rootScope;
      service = authenticate;
      q = $q;
  }));

  it("should call the retrieveUser", function(){
      spyOn(data, "retrieveUser").and.callThrough();;

      var email = 'test.user@nomail.com';
      service.checkUser(email); 

      deferred.resolve({userName: email, 
      firstName: Faker.Name.firstName(), 
      lastName: Faker.Name.lastName()});

      rootScope.digest();

      expect(data.retrieveUser).toHaveBeenCalled();
  });
});

我收到这样的错误:

Error: [$injector:unpr] Unknown provider: qProvider <- q <- data_service.....

我的目标是模拟控制器使用的服务,即(服务)return 一个承诺。 谢谢。

angular.module('test.data', []).factory('data_service', 
      function (q) {
      data = {

从函数参数中删除 q,angular 尝试在此处以其他方式注入它,但它不能