В приведенной ниже директиве проверяется/загружает шаблон со значением «pass, fail, required». условия являютсяСоздание теста жасмина для угловой директивы
if(parent value == required){
1. if the value is true --> $scope.msg = "fail" --> loads the template with {{msg}} value
2. if the value is false --> $scope.msg = "pass" --> loads the template with {{msg}} value
}
В деталях,
загрузки шаблона: [showerror.html]
<div>{{msg}}</div>
Директива Вызов:
<div show-error="obj"></div>
(OBJ содержит в качестве obj.error и obj.required)
Директива:
angular.module("dsf").directive('showError', [
function() {
'use strict';
return {
scope: {
obj: '=showError'
},
link: function ($scope) {
$scope.showError = {};
$scope.msg = "";
function setTemplate(filename) {
$scope.showError.template = 'app/path/' + filename + '.html';
}
$scope.$watch(function() {
if ($scope.obj.required === true) {
if ($scope.obj.error === false) {
$scope.msg = "Pass";
} else if ($scope.obj.error === "required") {
$scope.msg = "Required";
} else if ($scope.obj.error === true) {
$scope.msg = "fail";
}
} else {
if ($scope.obj.error === true) {
$scope.msg = "fail";
} else if ($scope.obj.error === false) {
$scope.msg = "Pass";
}
}
setTemplate("showerror");
});
},
template: '<div ng-include="showError.template"></div>'
};
}
]);
Как я новичок в тесте жасмин, как я могу написать тест для этой директивы? какие-либо предложения?
Хорошо. Я написал единичный тест для этой директивы. Что случилось сейчас?
describe('showError', function() {
'use strict';
var compile, $scope, element;
beforeEach(module('dsf'));
beforeEach(inject(function ($compile, $rootScope) {
element = angular.element('<div show-error="obj"></div>');
$scope = $rootScope.$new();
compile = function (obj) {
$scope.obj = obj;
$compile(element)($scope);
$scope.$digest();
};
}));
it('updates the element when obj validation changes', function() {
var obj;
obj = {};
$scope = compile(obj);
$scope.apply(function() {
obj.required = true;
obj.error = true;
});
expect($scope.obj.msg).toContain('fail');
$scope.apply(function() {
obj.required = true;
obj.error = false;
});
expect($scope.obj.msg).toContain('Pass');
$scope.apply(function() {
obj.required = true;
obj.error = "required";
});
expect($scope.obj.msg).toContain('Required');
$scope.apply(function() {
obj.required = false;
obj.error = true;
});
expect($scope.obj.msg).toContain('Pass');
$scope.apply(function() {
obj.required = false;
obj.error = false;
});
expect($scope.obj.msg).toContain('fail');
});
});
Я получаю сообщение об ошибке:
undefined is not an object (evaluating $scopr.apply) error
Да. Я понял. Можете ли вы сказать мне, что тест подходит именно для этого каталога? – user3686652