注:建議的環節是回答有關服務的問題,並沒有就如何解決這個問題AngularJS:如何測試指向哪個元素的焦點?
我試圖建立一個業力測試我的一個簡單明確的解釋(和工作)AngularJS autofocus
指令:
app.directive('autofocus', function ($timeout) {
return {
replace: false,
link: function (scope, element, attr) {
scope.$watch(attr.autofocus,
function (value) {
if (value) {
$timeout(function() {
element[0].focus();
console.log('focus called');
});
}
}
);
}
};
});
這是我目前的測試:
describe('The autofocus directive', function() {
var timeout;
beforeEach(module('myApp'));
beforeEach(inject(function($timeout) {
timeout = $timeout;
}));
it('should set focus to first autofocus element', function() {
var form = angular.element('<form />');
var input1 = angular.element('<input type="text" name="first" />');
var input2 = angular.element('<input type="text" name="second" autofocus="true" />');
form.append(input1);
form.append(input2);
spyOn(input2[0], 'focus');
timeout.flush();
expect(input2[0].focus).toHaveBeenCalled();
});
這是失敗)從輸出( 10:
$ node_modules /人緣/斌/因緣開始測試/ karma.conf.js
INFO [人緣]:噶v0.12.23服務器開始在http://本地主機:8080/
INFO [發射]:啓動瀏覽器PhantomJS
INFO [PhantomJS 1.9.8(Linux)的]:連接於插座U34UATs8jZDPB74AXpqR ID爲96802943個
PhantomJS 1.9.8(Linux)的:執行的20 SUCCESS的0(0秒/ 0秒)
PhantomJS 1.9.8(Linux)自動對焦指令應該將焦點設置爲第一個自動對焦元素FAILED
預計的間諜焦點已被調用。
PhantomJS 1.9.8(Linux)的:執行的20的20(1 FAILED)(0.156秒/ 0.146秒)
只是添加
input[0].focus();
spyOn(input[0], 'focus')
後測試成功,當然,但它不是我想要的...
最後一個問題是:我如何karma測試一個指令,將焦點設置爲一個元素?
可能重複[如何測試焦點AngularJS?](http://stackoverflow.com/questions/24196072/how -to-test-focus-in-angularjs) – glepretre 2014-10-30 08:12:15
這個問題是針對服務的,對我來說答案不是那麼清楚...... :-( – MarcoS 2014-10-30 09:34:45
把它扔到jsfiddle中?如果可以的話,更容易處理看到它失敗 – deitch 2014-10-30 09:40:22