Итак, я тестирую контроллер, который ссылается на свойство, указанное как ngModel в DOM. Но пока я тестирую свой контроллер, у меня нет шаблона. Таким образом, всякий раз, когда $ scope.foo.property обращается к контроллеру, он выдает ошибку.Как издеваться над ngModel?
ответ
В тесте, вы можете определить свойство перед экземпляр контроллера:
it('should mock ng-model', inject(function($rootScope, $controller) {
$rootScope.foo = {
property: 'mock value'
};
$controller('myController', {$scope: $rootScope});
})));
Это foo.property имеет тип NgModelController, не уверен, как создать экземпляр или сделать это. –
Вы хотите проверить свой контроллер и его взаимодействия с этим свойством, а не с ngModelController? –
Это то, что я сделал, скажем, например, у меня есть экземпляр ngModelConroller, который передается в контроллер, поэтому я бы высмеивал экземпляр ngModelController, а издевавшиеся методы сказали $ setValidity и ввели его в область действия и передали его по контроллеру. Таким образом, я могу проверить, был вызван метод $ setValidity, если мой функциональный spec завершает это. –
контроллеры и виды (шаблоны) являются две отдельные вещи в угловых приложениях. Что их склеивает, это область (или модель). Таким образом, для тестирования контроллера все, что вам нужно, - это поддельная область действия, чтобы перейти к функции контроллера.
Вот очень простой пример использования глобального контроллера (только, чтобы держать вещи легче понять - не использовать глобальные контроллеры в рабочем коде) и тестовое псевдо функции:
function MyCtrl($scope) {
$scope.bar = $scope.foo.property + 1;
}
function test() {
var scope = { foo: { property: 1 }};
MyCtrl(scope);
expect(scope.bar).toBe(2);
}
Он получает немного сложнее, чем когда контроллер определен в модуле, но это еще одна история.
Можете ли вы предоставить макет шаблона? –
Макет шаблона, ну, я тестирую контроллер, зачем мне нужен шаблон макета? В учебниках говорится: «В угловых контроллерах строго отделены от DOM» –
Действительно. Что вызывает вопрос, зачем вам шаблон? –