javascript - Angular 单元测试 : how to test controller properties without scope

标签 javascript angularjs unit-testing jasmine

我正在尝试为 Controller 编写一些测试,但所有关于此的文档/教程/等都在 $scope 上演示了函数和变量。如果你想测试不在 $scope 上的东西怎么办?

例如:

app.controller('fakeCtrl', function($scope) {

    var foo = 'bar';

    function fooBar() {
        console.log('foo bar');
    }

});

有什么方法可以对 foofooBar() 进行单元测试吗?

这是行不通的:

describe("fake controller", function(){

    beforeEach(module('app'));

    var $controller;

    beforeEach(inject(function(_$controller_, $rootScope){
        $controller = _$controller_;
        $scope = $rootScope.$new();
    }));

    describe('foo property', function() {
        it('is bar', function() {
          var controller = $controller('fakeCtrl', { $scope: $scope });
          expect(controller.foo).toEqual('bar');
        });
    });
   ...

最佳答案

你不能。变量 foo 和函数 fooBar 在 Controller 构造函数的范围之外是不可访问的。但是,您可以这样做:

app.controller('fakeCtrl', function($scope) {
  this.foo = 'bar';
  this.fooBar() {
    console.log('foo bar');
  }
});

比:

(...)
describe('foo property', function() {
    it('is bar', function() {
      var controller = $controller('fakeCtrl', { $scope: $scope });
      expect(controller.foo).toEqual('bar');
    });
});

在测试中,您将 foo 描述为一个属性,但在您的 Controller 中,foo 只是变量而非属性。

编辑:检查https://docs.angularjs.org/api/ng/directive/ngControllercontroller as 语法。

关于javascript - Angular 单元测试 : how to test controller properties without scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28319879/

相关文章:

javascript - 多个 HTML Reporters Karma Test Runner

python - Django 中的自定义用户测试

javascript - 转义正则表达式字符串?

当 ng-options 从 select ng-model 引用不同的模型时,AngularJS 1.3.0 不再显示默认选择

javascript - jQuery DataTables 数据量限制是什么

javascript - 一个带参数的函数,调用4次,数据分开

angularjs - 验证AntiForgeryToken AngularJS。 X-XSRF-TOKEN header 和 XSRF-TOKEN cookie 设置但得到 400

java - JUnit 测试方法失败

javascript - 我如何将 href 应用于整个 svg?

Javascript AddEventListener 未定义