2013-06-13 1 views
2

Я чрезвычайно новичок в угловом и жасмине, поэтому, извините, если это основной вопрос, и я кое-что упустил из документации и учебных пособий, которые я прочитал. Я создаю свой первый модульный тест для нового углового проекта. У меня возникают проблемы с вызовами методов и некоторыми переменными.Вызов методов объемной области в жасмине

Я проверяю этот манекен контроллер:

.controller('DummyCtrl', function DummyCtrl($scope){ 
    $scope.name = "TBD"; 

    $scope.changeToJackie = function(){ 
     $scope.name="Jackie"; 
    }; 

    $scope.changeToGeorge = function() { 
     $scope.name="George"; 
    }; 
}) 

С помощью этого теста блок:

describe('DummyCtrl', function(){ 
    var $scope, $controller, DummyCtrl; 

    beforeEach(module('mApp'); 
    beforeEach(inject(function($injector) { 
      $scope = $injector.get('$rootScope'); 
      $controller = $injector.get('$controller'); 
      DummyCtrl = $controller('DummyCtrl', {$scope: $scope}); 

    it('should start with TBD', function(){ 
     expect($scope.name).toEqual("TBD"); 
    }); 

    $scope.changeToJackie(); 
    it('should now say Jackie', function() { 
     expect($scope.name).toEqual("Jackie"); 
    }); 

    $scope.changeToGeorge(); 
    it ('should now say George', function() { 
     expect($scope.name).toEqual("George"); 
    }); 
}); 

Я получаю тонны больше ошибок в этом более базовой версии, которую я создал, чтобы выяснить мой фактические модульные тесты (в частности, вызов $ scope.method ("param"), который вызывает $ http.PUT. Мои ошибки больше похожи:

Chrome 27.0 (Mac) unauth controllers DummyCtrl should start with TBD FAILED 
Error: Argument 'DummyCtrl' is not a function, got undefined 
    at assertArg (/<path>/build/angular/angular.js:975:11) 
    at assertArgFn (/<path>/build/angular/angular.js:985:3) 
    at /<path>/build/angular/angular.js:4656:9 
    at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:20:16) 
    at Object.invoke (/<path>/build/angular/angular.js:2820:28) 
    at workFn (/o<path>/build/angular/angular-mocks.js:1780:20) 
Error: Declaration Location 
    at window.inject.angular.mock.inject (/<path>/build/angular/angular-mocks.js:1766:25) 
    at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:10:14) 
    at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:9:2) 
    at /o<path>/src/app/unauth/unauth.spec.js:1:1 
Expected undefined to equal 'TBD'. 
Error: Expected undefined to equal 'TBD'. 
    at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:25:25) 
Chrome 27.0 (Mac) unauth controllers DummyCtrl encountered a declaration exception FAILED 
TypeError: Cannot read property 'stack' of null 
    at workFn (/<path>/build/angular/angular-mocks.js:1782:55) 
TypeError: Cannot call method 'changeToJackie' of undefined 
    at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:28:11) 
    at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:23:3) 
    at null.<anonymous> (/<path>/src/app/unauth/unauth.spec.js:9:2) 

Пожалуйста, извините мою силу в угловом/жасмине/javascript. Любая помощь будет благодарна, даже если это просто ссылка на лучший учебник.

ответ

3

Вы не можете написать тестовый код в описании теста за пределами функций «beforeEach» и «it».

Это:

$scope.changeToJackie(); 
    it('should now say Jackie', function() { 
     expect($scope.name).toEqual("Jackie"); 
    }); 

    $scope.changeToGeorge(); 
    it ('should now say George', function() { 
     expect($scope.name).toEqual("George"); 
    }); 

потребности выглядеть следующим образом:

describe('calling changeToJackie',function() { 

    beforeEach(function() { 
     $scope.changeToJackie(); 
    }); 

    it('should now say Jackie', function() { 
     expect($scope.name).toEqual("Jackie"); 
    }); 

    it ('should say George if I call changeToGeorge', function() { 
     $scope.changeToGeorge(); 
     expect($scope.name).toEqual("George"); 
    }); 
}); 
+0

удивительным! Это именно то, что мне нужно! Благодарю. – jbenowitz

 Смежные вопросы

  • Нет связанных вопросов^_^