【问题标题】:How to you test an angularjs module defined inside an IIFE with jasmine?如何用茉莉花测试在 IIFE 中定义的 angularjs 模块?
【发布时间】:2015-02-18 02:40:27
【问题描述】:

如何在 jasmine 上测试这个模块? 问题是 $controller 很难测试,因为函数隐藏在闭包中,很难测试它们。

换句话说,鉴于下面的模块定义,为 MainCtrl 编写单元测试似乎是不可能的。

(function () {

    'use strict';

    angular.module('app', []);

    function MainCtrl() {
      var mc = this;
      mc.obj = {
        val : 50  
      };
    }

    angular.module('app').controller('MainCtrl', MainCtrl);

} () );

和“典型的”茉莉花测试

describe('app', function(){

  beforeEach(module('app'));

  it('should create an objet with val 50', inject(function(_$controller_) {
    var scope = {},
        ctrl = _$controller_('MainCtrl', {$scope:scope});

    expect(scope.obj.val).toBe(50); // returns Expected undefined to be 50.
  }));

});

当 Angular 在 jasmine 测试函数中注入 _$controller_ 服务时,创建的控制器实例返回一个未定义的 $scope。

那么如何测试呢?

我在 StackOverflow 上搜索此问题的解决方案,但没有给出我正在寻找的答案,因此我实现了自己的一个。

【问题讨论】:

  • 回答你自己的问题是允许的,但目前我认为这个问题不清楚并且没那么有用。您能否将其改写为一个清晰、简洁的问题(请参阅How to Ask)?现在,它只不过是一段没有任何解释的代码。

标签: javascript angularjs unit-testing jasmine iife


【解决方案1】:

只需这样做就可以用茉莉花进行测试:

describe('app', function () {

    var $controller;

    beforeEach(function () {

        module('app');

        inject(function (_$controller_) {

            $controller = _$controller_('MainCtrl');

        });
    });

    //-- spec - test controller

    describe('Controller : MainCtrl', function () {

        it('should create an object with val 50', function () {

            expect($controller.obj.val).toBe(50);

        });
    });

});

这是一个jsfiddle

希望对你有帮助!

【讨论】:

  • @AndrewT。是的,这就是我的意思。谢谢你的澄清
【解决方案2】:

问题来了

var scope = {}, ctrl = _$controller_('MainCtrl', {$scope:scope});

您正在导入未定义的范围。你需要做这样的事情:

  1. 注入 $rootScopeinject(function (_$controller_, _$rootScope_)

  2. 构造新作用域: var scope = $rootScope.$new();

  3. 构建控制器: var ctrl = _$controller_('MainCtrl', {$scope: scope});

【讨论】:

  • 您的意思是:步骤 2. var scope = $rootScope.$new() 吗? (你错过了连字符)
猜你喜欢
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
  • 2023-03-27
  • 2015-05-17
  • 1970-01-01
  • 2016-10-13
相关资源
最近更新 更多