2013-02-12 139 views
2

我是Jasmine和jQuery的新手,并且在mousedown事件中遇到了麻烦。这是我规范中失败的部分(Jasmine说,间谍mousedown没有被调用。)我怀疑这可能是因为我触发事件的方式。茉莉花鼠标事件

it("draws a path on mousedown", function() { 
    spyOn(drawing,'mousedown'); 
    $('#canvas').trigger('mousedown'); 
    expect(drawing.mousedown).toHaveBeenCalled(); 
    expect(drawing.isDrawing).toEqual(true); 
}); 

相应的JavaScript代码是在这里:

function Drawing(canvas, eraseAllButton, eraseButton) { 
    this.isDrawing = false; 
    this.erasing = false; 
    this.canvas = canvas; 
    this.context = canvas.getContext("2d"); 
    this.eraseAllButton = eraseAllButton; 
    this.eraseButton = eraseButton; 

// Sets up event listeners for drawing. 
    var self = this; 
    this.canvas.addEventListener("mousedown", function() { self.mousedown() }, false); 
}; 

// Begins to draw a path on mousedown. 
Drawing.prototype.mousedown = function(e) { 
    if (!e) var e = window.event; 
    e.preventDefault();  

    this.isDrawing = true; 
    this.x = e.pageX - this.canvas.offsetLeft; 
    this.y = e.pageY - this.canvas.offsetTop; 
    this.context.beginPath(); 
    this.context.moveTo(this.x, this.y); 
}; 
+0

是全规格可用的地方,所以我们可以看到你的beforeEach等?也许创建一个JSFiddle? – 2013-04-09 02:23:33

回答

0

试试这个:

var mouse = document.createEvent('MouseEvents'); 
mouse.initMouseEvent('mousedown', true, true, window); 
$('#canvas').get(0).dispatchEvent(mouse); 
+0

我们如何在jQuery中做到这一点? – sonam 2013-09-20 12:40:55