我试图使用Jasmine触发d3事件.特别是,我想检查我的事件监听器是否使用Jasmine间谍进行调用.
例如,如果我将d3缩放行为附加到svg元素(我的前端使用Backbone.js):
代码(a):
class MyView extends Backbone.View
initialize: ->
zoom = d3.behavior.zoom().on("zoom", this.zoom_listener)
d3.select(this.el).append("svg").attr("class", "viewport").call(zoom)
zoom_listener: ->
console.log("zoom called")
Run Code Online (Sandbox Code Playgroud)
Jasmine中的以下测试失败:
代码(b):
it "calls zoom listener on dblclick", ->
zoom_spy = spyOn(MyView.prototype, "zoom_listener").andCallThrough()
view = new MyView()
view.$(".viewport").trigger("dblclick")
waitsFor((-> zoom_spy.callCount == 1), "Call zoom", 1000)
Run Code Online (Sandbox Code Playgroud)
另一方面,(正如一个完整性检查)如果我将'dblclick'事件绑定到我的视图,如下所示,上面的测试即代码(b)将通过:
代码(c):
class MyView extends Backbone.View
events:
"dblclick" : "zoom_listener"
initialize: ->
zoom = d3.behavior.zoom().on("zoom", this.zoom_listener)
d3.select(this.el).append("svg").attr("class", "viewport")
# .call(zoom) # commented off this line for the sanity check
zoom_listener: ->
console.log("zoom called")
Run Code Online (Sandbox Code Playgroud)
任何人都可以给我一些见解,为什么我似乎无法在Jasmine测试中触发D3变焦事件,即代码(b)使用我上面的原始视图,即代码(a)?
我正在尝试在 mysql 中运行以下脚本:
DELIMITER $$$
DROP TRIGGER IF EXISTS invoice_line_insert
$$$
CREATE TRIGGER invoice_line_insert AFTER INSERT
ON invoice_line FOR EACH ROW
BEGIN
IF NEW.type = "DELIVERY" THEN
UPDATE invoice
SET invoice.etdelivery_amount = invoice.etdelivery_amount + NEW.amount
WHERE invoice.id_invoice = NEW.invoice_parent_id_invoice;
ELSE
UPDATE invoice
SET invoice.etexpense_amount = invoice.etexpense_amount + NEW.amount
WHERE invoice.id_invoice = NEW.invoice_parent_id_invoice;
END IF;
UPDATE invoice
SET invoice.vatamount = (NEW.amount * ((
SELECT vat.rate
FROM vat
WHERE vat.id_vat = NEW.vat_id_vat
) / 100)) + invoice.vatamount
WHERE invoice.id_invoice = NEW.invoice_parent_id_invoice;
UPDATE …Run Code Online (Sandbox Code Playgroud)