【问题标题】:Karma Jasmine testing inject not workingKarma Jasmine 测试注入不起作用
【发布时间】:2017-09-21 07:42:07
【问题描述】:

我是业力单元测试的新手,我在一个简单的离子应用程序中遇到了这个问题。

这是我的控制器:

  angular.module('starter').controller('AccountCtrl', function ($scope) {

    $scope.settings = {
      enableFriends: true
    };

    $scope.dummyFunction = function () {
      console.log("Just do nothing!");
    }
  });

这是我的单元测试文件:

describe('AccountCtrl', function () {
  var scope, createController;
  beforeEach(module('starter'));
  console.log("0");

  beforeEach(function () {
    console.log("1");
  })

  beforeEach(inject(function ($rootScope, $controller) {
    console.log("2");
    scope = $rootScope.$new();
    controller = $controller('AccountCtrl', {
      '$scope': scope
    });
  }));

  it('should do stuff', function () {
    console.log("3");
    expect("Hello!").toBeDefined();
  });

});

此时,当我运行测试时,我得到:

PhantomJS 2.1.1 (Mac OS X 0.0.0) LOG: 'WARNING: Tried to load angular more than once.'

PhantomJS 2.1.1 (Mac OS X 0.0.0) LOG: '0'

LOG: '1'
LOG: '3'
PhantomJS 2.1.1 (Mac OS X 0.0.0) AccountCtrl should do stuff FAILED
    forEach@/Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/ionic/js/ionic.bundle.js:13696:24
    loadModules@/Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/ionic/js/ionic.bundle.js:17883:12
    createInjector@/Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/ionic/js/ionic.bundle.js:17805:30
    workFn@/Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/angular-mocks/angular-mocks.js:2353:60
    /Users/eduard.lache/Documents/dummyProjects/unitTestingAPP/www/lib/ionic/js/ionic.bundle.js:17923:53
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.004 secs / 0.011 secs)

正如您从 console.log 消息中看到的那样,注入函数没有被调用,问题是我不知道为什么会这样,为什么这会导致我的测试失败,因为测试需要字符串“Hello !”待定义,就是这样。

如果我删除包含注入的 beforeEach,则测试成功。

我的目标是进行一个测试来验证 $scope.dummyFunction() 是否已被调用并且 $scope.settings 是否已定义。 即:

  it('should do stuff', function () {
    var ctrl = controller();
    ctrl.dummyFunction();
    expect(ctrl.dummyFunction).toHaveBeenCalled();
    expect(ctrl.settings).toBeDefined();    
});

【问题讨论】:

    标签: unit-testing angular ionic-framework karma-jasmine inject


    【解决方案1】:

    我是新的测试节点,我刚刚解决了你遇到的同样的问题。如果你能帮忙,我解决这个问题检查应用程序的所有依赖项并将它们放在业力的配置文件中。然后,我检查是否安装了所有依赖项(“dev”)并运行业力,这有效! =D

    我希望它可以帮助某人。 =)

    【讨论】:

      猜你喜欢
      • 2016-05-14
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      • 2017-07-23
      • 1970-01-01
      • 2019-03-26
      • 2017-05-07
      相关资源
      最近更新 更多