mod.directive('uiCopyLinkDialog', function(){
return {
restrict: 'A',
link: function(scope, element, attrs) {
var $elm = angular.element(element);
element.bind('click', function(event) {
$elm.addClass('test');
});
}
};
});
describe('pre-compiled link', function () {
beforeEach(mocks.inject(function($compile, $rootScope) {
scope = $rootScope;
element = angular.element('<span class="foo" ui-copy-link-dialog="url"></span>');
$compile(element)(scope);
scope.$digest();
}));
it("should change the class when clicked", function () {
element.click(); // this returns "'undefined' is not a function"
element[0].click(); // so does this
$(elm).click(); // this uses jquery and doesn't *seem* to fail
waits(500); // hack to see if it was a race condition
expect(elm.className).toContain('test'); // always fails
});
});
내가 볼 수 있는 여러 가지 방법으로 시도하시겠습니까 테스트 중인 링크를 클릭 () '와' 트리거할 이벤트 대다수가 확증하노라 정의되지 않은 '한' 오류:.
Tell me what I& # 39 m, 아무나 할 수 있는 잘못된 여기서요? 이 말은 it& # 39 의 예로 판독값 올바른 문법 하지만 내 테스트 러너 (카르마 꿀꿀 통해), t # 39 doesn& 무도회죠 놀이를하고 싶다.
트리거핸들러 자크 라이트 일부를 사용할 수 있습니다.
내가 이 트리거하는 데 사용되는 이벤트 디렉티브입니다 클릭합니다.
element = angular.element("<div myDirective-on='click'></div>");
compiled = $compile(element)($rootScope);
compiled.triggerHandler('click');
전체 예제에서와 support. dell. 이 블로그 포스트: http://sravi-kiran.blogspot.co.nz/2013/12/TriggeringEventsInAngularJsDirectiveTests.html
그래서 이 팬텀제스 문제가 있는 것으로 나타났다. 일부 이벤트가 don& 요소 요소에 대한 작동하는 것, t, t # 39 때 불지옥의 aren& # 39 문서에 대한 어디든요 한 것이 아니라, 실제로 메모리에 (that& # 39 의 내 이론, 어쨌든). 난 이미 트리거하거나 '클릭' 이 기능을 사용하여 해결하기 위해 이 행사를 요소:
define(function () {
return {
click: function (el) {
var ev = document.createEvent("MouseEvent");
ev.initMouseEvent(
"click",
true /* bubble */, true /* cancelable */,
window, null,
0, 0, 0, 0, /* coordinates */
false, false, false, false, /* modifier keys */
0 /*left*/, null
);
el.dispatchEvent(ev);
}
};
});
하지만 이 협력했습니다 다른 일에 더 있었다. 난 또 그들이성년에 쓸 수 있는 '폼' 이 값을 유지하는 것은 주어진 입력 테스트 포커스가, 이후, t # 39 는 거의 불가능하게 만드는 데 사용하는 브라우저 can& 팬텀제스 그건 뭔가 없는 경우 onscreen 표현. Simple API for 보면 누구나 할 수 없는 이 캐스퍼제스 제공하는 몇 가지 요구 사항.
실제 클릭할 수 있는 것은 아니지만 정말 표시됨과 양호한 상태로 directive& 액세스하십시오 # 39 의 기능을 통해, s # 39 를 ng 를 시뮬레이션하려면 it& 격리합니다 범위:
var element = $compile('<a ng-click="myfunc()">Click me</a>')(scope);
var isolateScope = element.isolateScope();
isolateScope.myfunc();
scope.$digest();
/* check that things changed ... */
그래서 제 솔루션을 이는 실제로 덮어쓰기/추가 요소를 바디입니다. 근본 문제는 이후 팬텀제스 doesn& 볼지옥으로 이벤트 # 39, t 각 요소 요소에 대한 실제 사용할 수 있도록 이벤트를 첨부하려면 간단해진다는 tufts. 듯했다.
afterEach(function(){
$('body').empty();
});
it('should do something when clicked', function(){
element = $compile('<div my-directive></div>')($scope);
$('body').append(element);
// fire all the watches, so the scope expressions will be evaluated
$rootScope.$digest();
$(element).find('.my-input').click();
});
[각 테스트 러너] 사용할 수 있습니다 (https://github.com/Pragmatists/angular-test-runner) 라이브러리 및 테스트는 다음과 같습니다.
const testRunner = require('angular-test-runner');
describe('directive', () => {
let app;
const {expectElement, click} = testRunner.actions;
beforeEach(() => {
app = testRunner.app(['mod']);
});
it("should add class when clicked", function () {
const html = app.runHtml('<span class="foo" ui-copy-link-dialog="url"></span>');
html.perform(
click.in('.foo')
);
html.verify(
expectElement('.foo').toHaveClass('test')
);
});
});