D3.js kitaplığını kullanan bir açısal uygulamasında grafik yönergesi var. direktifind3.js - jasmine testi bir svg öğesine tıklamak çağırıyor
Bölüm yüzden
svg.selectAll('g rect')
.on('click', function(d) {
scope.clickHandler(d, scope.data);
})
.on('mouseover', function() {
d3.select(this).classed('data-item-hover', true);
})
.on('mouseout', function() {
d3.select(this).classed('data-item-hover', false);
});
bazı birim testlerinde bu işleyicileri kapsayacak istiyorum, ama aslında dinamik bu olayları çağırmak nasıl mücadele ediyorum gibi bazı svg elemanlarına fare olay işleyicileri ekler.
Ben benim test spec bu çalışılıyor
describe('scope.clickHandler', function() {
var rect;
beforeEach(function(){
spyOn(scope, 'clickHandler');
rect = svg.select('g rect')[0][0];
rect.on('click')();
});
it('should call scope.render after a window resize event occurs', function() {
expect(scope.clickHandler).toHaveBeenCalled();
});
});
Ancak bu bir hatayı
TypeError: undefined is not a constructor (evaluating 'rect.on('click')'
Bu SO How to invoke "click" event programmatically in d3? geldi ve ikinci cevap bu tekniği çalışırken götürdü ne olduğunu atar .
D3.js'de olayları kaydettiğim svg öğelerinde bir fare olayını nasıl çağırabilirim?
Teşekkür
Bkz: http://stackoverflow.com/questions/9063383/how-to-invoke-click-event-programmatically-in-d3 – jarandaf
Bu, benim sorumun en altında başvurulan bağlantının tam adresi Bu – mindparse
Benim hatam :) Ben sadece ince bir fark görebiliyorum: 'svg.select ('g rect') [0] [0]' bir DOM elemanıdır, d3 ise seçim dizisinin kendisine metotları bağlar, dolayısıyla hata – jarandaf