问题
我正在尝试测试一些指令(下面的代码).其中之一是"电子邮件"(在代码(挪威语))指令中称为"epost".解决这个问题应该适用于所有这些,所以我暂时保留它.
技术:Angularjs,Jasmine,Requirejs,(在Chrome中运行的咕噜声和业力)
该指令以两种方式验证电子邮件地址; 在升档和模糊.我可以毫无问题地测试升档,你可以在下面的测试中看到,但我无法弄清楚如何模拟模糊,因此指令中的bind('blur')运行.
我做了什么
我试图捕获这样的编译元素:
elem = angular.element(html);
element = $compile(elem)($scope);
Run Code Online (Sandbox Code Playgroud)
然后在测试中我尝试了几种排列,以便在指令中的bind函数内部使用控制台日志来触发模糊.以下都不适用.它不会触发.
elem.trigger('blur');
element.trigger('blur');
elem.triggerHandler('blur');
element.triggerHandler('blur');
element.blur();
elem.blur();
Run Code Online (Sandbox Code Playgroud)
我基于注入和设置:测试自定义验证angularjs指令
angularjs中的email指令包含在requirejs中
define(function() {
var Directive = function() {
return {
require: 'ngModel',
link: function(scope, elem, attrs, ctrl) {
var pattern = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/;
elem.bind('blur', function() {
scope.$apply(function () {
if (!elem.val() || pattern.test(elem.val())) {
ctrl.$setValidity('epost', true);
} else {
ctrl.$setValidity('epost', false);
}
});
});
ctrl.$parsers.unshift(function(viewValue) {
if (pattern.test(viewValue)) {
ctrl.$setValidity('epost', true);
return viewValue;
} else {
return …Run Code Online (Sandbox Code Playgroud)