2016-12-28 2 views
0

Я пытаюсь получить/установить «testModel.number» в своем модульном тесте, но я не могу его получить. Когда я запускаю тест я получаю сообщение об ошибке:Передача одного из параметров в конструкторе для модульного теста

Error: [$injector:unpr] Unknown provider: testModelProvider <- testModel 

Вот контроллер:

angular.module("TestApp", []) 
    .controller("IndexController", function ($scope, testModel) { 
     $scope.name = "test"; 

     testModel = { 
      number: 0 
     } 

     if (testModel.number === 1) { 
      $scope.name = "test1"; 
     } else { 
      $scope.name = "test2"; 
     } 
    }); 

Вот тестовый модуль:

describe('IndexController', function() { 
    var scope, createController; 

    beforeEach(module("TestApp")); 

    beforeEach(inject(function ($rootScope, $controller, testModel) { 
     scope = $rootScope.$new(); 

     createController = function() { 
      return $controller('IndexController', { 
       '$scope': scope, 
       'testModel': testModel 
      }) 
     } 
    })); 

    it('example test', function() { 
     var controller = createController(); 
     testModel.number = 1; 

     expect(scope.name).toBe('test1'); 
    }); 
}); 

Я довольно новичок в тестировании модулей, поэтому любые предложения были бы замечательными! Заранее спасибо!

ответ

1

Я думаю, вам необходимо передать объект testModel методу создания контроллера. Жасмин не знает, как вводить пользовательских поставщиков.

describe('IndexController', function() { 
    var scope, createController; 

    beforeEach(module("TestApp")); 

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

     createController = function (testModel) { 
      return $controller('IndexController', { 
       '$scope': scope, 
       'testModel': testModel 
      }) 
     } 
    })); 

    it('example test', function() { 
     var testModel = { number: 1 }; 
     var controller = createController(testModel); 

     expect(scope.name).toBe('test1'); 
    }); 
}); 

Если у вас будет несколько тестов, которые будут нуждаться в testModel объект, вы можете также определить его на глобальном уровне следующим образом:

describe('IndexController', function() { 
    var scope, createController; 
    var testModel = { number: 1 }; 

    beforeEach(module("TestApp")); 

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

     createController = function() { 
      return $controller('IndexController', { 
       '$scope': scope, 
       'testModel': testModel 
      }) 
     } 
    })); 

    it('example test', function() { 

     var controller = createController(); 

     expect(scope.name).toBe('test1'); 
    }); 
}); 
+0

Удивительный он работал, спасибо показал мне эти подходы! –

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