单元测试AngularFire业力错误

Pau*_*ake 3 unit-testing angularjs firebase karma-runner angularfire

当我运行我的业力单元脚本并且我无法弄清楚原因时,我收到此错误

Error: [$injector:unpr] Unknown provider: FBURLProvider <- FBURL
Run Code Online (Sandbox Code Playgroud)

这是我的指令代码

'use strict';

angular.module('userMenu', ['firebase'])
  .directive('userMenu', function (FBURL, angularFire) {
    return {
      restrict: 'A',
      scope: true ,
      link: function postLink(scope, element, attrs) {

        /**
         * Returns the logged in user information
         * @param {string} FBURL
         * @param {object} scope
         * @returns {promise}
         */
        scope.getUserDataFromFirebase = function(FBURL, scope) {
          var ref = new Firebase(FBURL + '/users/' + scope.auth.id);
          return angularFire(ref, scope, 'user', {})
        }

      }
    };
  });
Run Code Online (Sandbox Code Playgroud)

这是我的规范代码

'use strict';

describe('Directive: userMenu', function () {

  // load the directive's module
  beforeEach(module('userMenu', 'firebase'));

  var element,
    elementScope,
    scope;


  beforeEach(inject(function ($rootScope, $compile, _FBURL_, _angularFire_) {
    scope = $rootScope.$new();
    element = angular.element('<div user-menu></div>');
    element = $compile(element)(scope);
    elementScope = element.scope();
  }));

  it('should get user data', inject(function ($compile) {
    console.log(scope);
  }));
});
Run Code Online (Sandbox Code Playgroud)

说实话,我不熟悉单元测试,所以我可能会遗漏一些非常明显的东西,但任何帮助都会受到赞赏.

del*_*eli 5

如果您的应用程序中的所有内容都正常工作,但您的测试中出现错误,那么您需要将firebase添加到Karma的文件中.找到你的karma.conf.js(在yeoman生成的ionic-angular中将此添加到Gruntfile.js的Karma套件中),并使其类似于以下内容:

karma: {
  options: {
    ...
    files: [
      ...
      'https://cdn.firebase.com/v0/firebase.js',
      'app/bower_components/angular-fire/angularFire.js',
      ...
    ],
    ...
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

然后在你的规范中,包括firebase:

beforeEach(module('Simplift', 'firebase'));
Run Code Online (Sandbox Code Playgroud)

每次您需要使用firebase服务时:

describe/it('some test desc ...', inject(function (..., $firebase) {
  // now we can use $firebase!!
  fireSync = $firebase(new Firebase('https://app_name.firebaseio.com'));
  ...
}));
Run Code Online (Sandbox Code Playgroud)

让我永远想出这个,并希望它能减轻某人的压力.这对我来说现在很有用,但可能不是最干净的方法(请提供建议!),因为你实际上并没有删除firebase数据,但你可以在你的firebase数据库中添加一个"测试"网址.