2016-05-12 9 views
0

Kann ein http-on-modify-request -Observer getestet werden?HTTP-on-Modify-Request-Beobachter über SDK/System/Ereignisse testen?

Die events module bietet eine emit(type, event) Methode zum Erstellen von Firefox-Ereignissen. Um ein Modul zu testen, das auf http-on-modify-request hört, können Sie den Typ auf http-on-modify-request einstellen. Die Frage ist , wie man die event Parameter einstellt, um eine Netzanforderung nachzuahmen? In der Dokumentation wird

event : object
An optional object with data and subject attributes. data refers to a string that you would like to pass through this event. subject should refer to the actual actor/subject of this event (ie: the object emitting the event).

event.data Einstellung wird als data Parameter des Beobachters weitergeleitet, gleich für zb eine Zeichenfolge als event.subject, aber wenn ich ein Objekt mit einem QueryInterface -function passieren versucht, es hat nicht funktioniert:

events.emit("http-on-modify-request", {"subject": { 
    QueryInterface : function() { 
     return {"URI": {"spec": 'mock://URI.spec'}} 
    }}}); 

-Code zu testen ist sehr ähnlich https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/system_events.


@ humanoiden Antwort

obs.notifyObservers(
    { QueryInterface : function() { 
     return {"URI": NetUtil.newURI("mock://URI.spec") }; 
    }}, 
    "http-on-modify-request", 
    null); 

verwenden fehlgeschlagen mit

JavaScript Error: "NS_NOINTERFACE: Component returned failure code: 0x80004002 (NS_NOINTERFACE) [nsISupports.QueryInterface]" {file: "resource://gre/modules/commonjs/toolkit/loader.js -> resource://addon-id/caller.js" line: xy}]

Antwort

1

Die emit Methode von sdk/system/events nicht nützlich ist, Beobachter-Benachrichtigungen zu erstellen, wie Benachrichtigungen von Firefox aussehen, weil es fügt Wrapper, um schwache Referenzen zu gewährleisten.

Stattdessen würde ich vorschlagen, die "vanilla" observer service, zum Beispiel von Services.jsm zu verwenden:

const { Services: { obs } } = require("resource://gre/modules/Services.jsm"); 
+0

Vielen Dank, dass Sie mich daran zu hindern, gehen diesen Weg nach unten. Haben Sie zufällig einen Beispielcode herumliegen oder nicht? –

+0

@user nsIObserverService für diesen speziellen Fall verwenden? Nicht wirklich. Aber die Methode notifyObservers sollte ziemlich einfach zu verwenden sein. – humanoid

+0

Nur mit diesem, ich habe einen 'JavaScript-Fehler: NS_NOINTERFACE: Komponente Fehlercode zurückgegeben: 0x80004002 (NS_NOINTERFACE) [nsISupports.QueryInterface]" {file: "resource: //gre/modules/commonjs/toolkit/loader.js - > ressource: //addon-id/caller.js "line: xy}]' –