我是 Angular 和 karma 的新手。

在 angular 我有一个像下面这样的 Controller

angular.module('login').controller('LoginCtrl', function ($scope, $location) {
    var vm = this;
    $scope.text = 'Hello World!';
    vm.text = 'hi';
});

我写了如下的 karma 测试用例
    describe('LoginCtrl', function() {
           beforeEach(module('login'));
               beforeEach(module('auth2AdminUI'));
               var scope,ctrl,vm;

        beforeEach(inject(function($rootScope, $controller) {
          scope = $rootScope.$new();
          ctrl = $controller('LoginCtrl', {$scope: scope});
          vm = this.ctrl;
        }));

        it('Checck scope text', function () {
        expect(scope.text).toBe('Hello World!');
        });

        it('check vm text',function(){
           expect(vm.text).toBe('hi');
        })

检查范围文本测试用例通过,但检查 vmtext 失败。我不知道为什么。我的代码有任何问题,我想我正在使用 这个 来访问 Controller ,这可能有问题。

错误:
  LoginCtrl
x check vm variable
  PhantomJS 1.9.8 (Windows 8 0.0.0)
  Chrome 46.0.2490 (Windows 8.1 0.0.0)
TypeError: Cannot read property 'text' of undefined

告诉我如何访问 Controller 中取消此关键字的变量和函数。

最佳答案

这里 vm 只不过是您的 Controller 本身,因此您可以使用 Controller 来测试变量和函数。

describe('Login Ctrl Description', function () {
        var LoginCtrl;
        beforeEach(inject(function ($rootScope) {
            scope = $rootScope.$new();

            // Create Login controller
            LoginCtrl = $controller('LoginCtrl', {
                $scope: scope
            });
        }));
        it('check vm text', function () {
            expect(LoginCtrl.text).toBe('hi');
        })
    });

关于html - 如何在 karma 测试用例中访问 Controller 功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33474207/

10-12 13:40
查看更多