如何测试依赖于注入数据的范围变量?

时间:2015-05-05 14:07:30

标签: javascript angularjs testing jasmine

我有一个控制器,简化为简洁:

.controller('myCtrl', ['$scope', 'data', function ($scope, data) {

    $scope.myVar = testFunction(data.name);

    function testFunction (name) { ... }; //returns string or null
};

data是我使用stateProvider中resolve的{​​{1}}属性获得的对象。

我希望有两个Jasmine测试验证state是:

  1. $scope.myVar有值时,某种字符串(并不重要)。
  2. 如果data.name没有值,则
  3. null。
  4. 例如:

    data.name

    我的问题是it('should verify myVar is null when name has no value', function () { expect(scope.myVar).toBeNull(); }); 规范在it('test title', function () {..});函数中初始化控制器后运行。因此,如果我想设置beforeEach,我需要在data部分进行设置。但是,如果我这样做,我会提前确定beforeEach,而我希望我的两个测试都有所不同 - 一次为空,一次为#34; John"例如。

    当想要设置将在控制器初始化中使用的对象并使用不同的值测试它们时,最佳做法是什么?

    (注意:由于我不想污染范围,该功能是私有的。)

1 个答案:

答案 0 :(得分:0)

作为初步预感,我很可能会在两个不同的describe部分进行测试:

describe('null title', function () {
  beforeEach(function () {
    // setup so that resolve returns null
  });

  it('verify null', function () {
    // the test
  });
});

describe('not null title', function () {
  beforeEach(function () {
    // setup so that resolve returns not null
  });

  it('verify not null', function () {
    // the test
  });
});

这对你来说是否可行?