javascript - 如何测试依赖于注入(inject)数据的范围变量?

标签 javascript angularjs testing jasmine

我有一个 Controller ,为简洁起见进行了简化:

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

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

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

data 是我使用 stateProvider 中 stateresolve 属性获得的对象。

我想要两个 Jasmine 测试来验证 $scope.myVar 是:

  1. data.name 有值时,某种字符串(并不重要)。
  2. 如果 data.name 没有值,则为 null。

例如:

it('should verify myVar is null when name has no value', function () {
        expect(scope.myVar).toBeNull();
});

我的问题是 it('test title', function () {..}); 规范在 beforeEach 函数中初始化 Controller 之后运行。因此,如果我想设置 data,我需要在 beforeEach 部分中进行。但如果我这样做,我会提前确定 name,而我希望它在我的两次测试中都不同 - 例如一次为 null,一次为“John”。

当一个人想要设置将在 Controller 初始化中使用的对象并使用不同的值测试它们时,最佳实践是什么?

(注意:由于我不想污染作用域,该函数是私有(private)的。)

最佳答案

作为最初的预感,我很可能会在两个单独的 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
  });
});

这对您来说可行吗?

关于javascript - 如何测试依赖于注入(inject)数据的范围变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30055322/

相关文章:

javascript - $event.stopPropagation 不起作用

javascript - asp net 中的确认是或否消息

javascript - 下拉列表未填充 - Angular JS

javascript - 通过 URL 获取 svg 数据的 Angular 指令

javascript - AngularJS - 管理 $http 成功回调

angularjs - $scope var 不在 child 中传播

selenium - 通过 saucelabs 运行 testcafe 脚本时获取 "Failed to start Selenium listener."错误消息

unit-testing - 单元测试时,应该如何处理对象的初始化测试?

android - 在 Android 中创建一个测试项目以测试另一个项目中的类

javascript - (搜索选项不起作用) Uncaught ReferenceError : google is not defined