是否可以测试http-on-modify-request
- 观察者?
events
module提供emit(type, event)
方法来创建Firefox事件。要测试收听http-on-modify-request
的模块,您可以将类型设置为http-on-modify-request
。问题是如何设置event
参数以模仿网络请求?文档说明
event:object
具有数据和主题属性的可选对象。 data是指您想要传递的字符串 通过这个活动。主题应指实际的演员/主题 此事件(即:发出事件的对象)。
设置event.data
作为观察者的data
参数传递,f.ex相同。一个字符串作为event.subject
,但当我尝试传递一个带有QueryInterface
- 函数的对象时,它不起作用:
events.emit("http-on-modify-request", {"subject": {
QueryInterface : function() {
return {"URI": {"spec": 'mock://URI.spec'}}
}}});
要测试的代码与https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/system_events非常相似。
@ humanoid的使用答案
obs.notifyObservers(
{ QueryInterface : function() {
return {"URI": NetUtil.newURI("mock://URI.spec") };
}},
"http-on-modify-request",
null);
失败
JavaScript错误:“NS_NOINTERFACE:组件返回失败代码: 0x80004002(NS_NOINTERFACE)[nsISupports.QueryInterface]“{file: “resource://gre/modules/commonjs/toolkit/loader.js - > 资源://addon-id/caller.js“line:xy}]
答案 0 :(得分:1)
来自emit
的{{1}}方法对于创建看起来像来自Firefox的通知的观察者通知没有用,因为它添加了包装以确保弱引用。
相反,我建议使用"vanilla" observer service,例如来自sdk/system/events
:
Services.jsm