Общедоступные вары/методы на контроллере не видны, как определено Жасмин, работающим через наглость

Я пытаюсь запустить тесты Jasmine в своем приложении Angular, используя наглость в Visual Studio.

У меня есть контроллер, который определяется как:

angular.module('testApp')
.controller('TestAppCtrl', ['TestService',
    function ($service) {
        var vm = this;

        // just a function for testing
        vm.sum = function (x, y) { return x + y };
    }
]);

Затем я описываю свой тест Жасмин так:

describe('TestAppCtrl', function () {
    var ctrl, TestService;

    beforeEach(module('testApp'));

    beforeEach(inject(function ($controller, _TestService_) {
        TestService= _TestService_;
        ctrl = $controller('TestAppCtrl');
    }));

    it('ctrl is defined', function () {
        expect(ctrl).toBeDefined();
    });

    it('1 + 2 equals 3', function () {
        expect(ctrl).toBeDefined();
        expect(ctrl.sum(1, 2)).toBe(3);
    });
});

Второй тест, 1 + 2 equals 3, не проходит. Я получаю эту ошибку:

Message: TypeError: undefined is not a constructor (evaluating 'ctrl.sum(1, 2)') in file:///...

Я пробовал это разными способами: определяя простую переменную на контроллере (vm.testVar = 12345) или даже вводя $scope и определяя переменные на нем. Я правильно ввел его и на тесте. Обе эти попытки потерпели неудачу с одной и той же ошибкой; как будто средство запуска тестов не распознает никаких значений в контроллере, даже если сам контроллер определен.


person Ivo Coumans    schedule 11.02.2016    source источник


Ответы (1)


На мой взгляд, это должно работать... Но попробуйте вызвать функцию $controller() со вторым аргументом, который является областью действия, как показано в этом примере: Как протестировать модульное тестирование John Papa vm.model с помощью jasmine?

Возможно, это влияет на то, как создается прицел...

person ogugger    schedule 11.02.2016