Mit phantomjs, um ajax-Aufrufe mit extjs-proxy auf der lokalen Datei
Habe ich eine grundlegende EXT JS zu speichern, dass ein proxy verwendet wird, um Zugang zu einem lokalen json-Datei.
z.B.
...
proxy: {
type: 'ajax',
api: {
read: 'data/mydata.json'
},
reader: {
type: 'json',
root: 'datas',
successProperty: 'success'
}
}
...
Will ich mit Maven, Jasmine, PhantomJS, zu bauen und zu testen, mein Projekt mit Atlassian Bamboo (mein CI-server).
Wenn ich ausführen PhantomJS lokal, etwa so:
$ phantomjs "c:\phantomjs-1.6.1\examples\run-jasmine.js" run-tests.html
Bekomme ich die folgende Ausgabe:
'waitFor()' finished in 422ms.
4 specs, 2 failures in 0.075s
Dies ist passiert, weil PhantomJS verwalten kann nicht zum laden von lokalen Dateien mit file:// Protokoll für die EXT JS-proxy.
Bin ich nach diese Beispiel, und Frage mich, ob es möglich ist, zu verspotten, meine proxies Antwort, so dass ich verwenden können, PhantomJS, die lokal (auf meine Bambus-server) mit der test-html-Datei, anstatt host das Projekt in einem web-server wie Apache (externe Abhängigkeit, die ich zu verwalten mit Maven).
Wenn nicht, gibt es andere Mechanismen (built in Jasmine, PhantomJS, oder sonst wie), dass ich verwenden können, um dies zu erreichen?
- FYI, ich bin mit phantomjs 1.6.1.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es eigentlich ist möglich zu tun, XHR mit PhantomJS, wenn Sie vom Dateisystem geladen werden!
Direkt aus die PhantomJs wiki:
Siehe auch dieses Problem Bericht für PhantomJs, die vielleicht etwas Licht auf dieses Thema.
Sencha 's" sencha erstellen jsb' Befehl verwendet PhantomJs (und Ext.Loader verwendet, XHR), und es unterstützt das laden aus der Datei system.
Kasse
[senchasdktools]/compat/command/src/modules/GenerateJSB.js
und[senchasdktools]/compat/command/scripts/phantomjs-jsb.js
.Sehe ich nicht alles, was mit der erwähnten
web-security
Schalter aber. Vielleicht Sie verwenden eine benutzerdefinierte phantomJs bauen.UPDATE
Dieses code-fragment ermöglicht XHR-Anfragen an das Dateisystem. Getestet mit der neuesten version von phantomJs (1.6.1/Windows):
UPDATE2
Dies ist ein funktionierendes Beispiel.
Legen alles in den gleichen Ordner, fügen Sie ein
test.txt
Datei mit irgendeinem Inhalt, dann laufenphantomjs script (script.js):
Html-Datei (test.html):
Chrome und --disable-web-security und ExtJs
Ich bin eigentlich mit
--disable-web-security
als Startparameter Google Chrome starte meine webapp form das Dateisystem während der Entwicklung und es funktioniert es (keine andere Chrome-Prozesse müssen ausgeführt werden, beim starten von Chrome).Chrome wird eine Warnmeldung angezeigt, die besagt, dass Sie verwenden eine nicht unterstützte option (gelbe Informationsleiste am oberen Rand).
Jedoch für Ext-Arbeit in einer Einrichtung wie dieser, die ich benötigt einen zusätzlichen patch zu Ext.Verbindung, um zu lösen zwei Fragen:
(1) xhr.status ist immer
0
beim laden der Datei-system-Ressourcen. Extern gilt dies nicht als status-code alssuccessful
. Es ist der code, gewidmet Umgang mit diesem, wenn Sie Extern läuft in PhantomJs - das ist der Grund, warum es funktionieren sollte es.(2) Chrom failed loading file system-Ressourcen, wenn die URL enthält einen query-string. Ich überschreiben Sie die Connection-Klasse zu Streifen alle url-Parameter, wenn im Dateisystem-Modus.
--config=config.json
zu phantomjs, die sind dieser, und bestätigt haben, Ihre Anwendung zupage.settings
im run-jasmine.js.--web-security=no
und--local-to-remote-url-access=yes
.page.settings.localToRemoteUrlAccessEnabled = true;
es funktioniert immer noch.phantomjs script.js test.html
aufrufenphantom.args[0]
im inneren des script.js Datei zurücktest.html
.page.evaluate
zum ausführen von code im Kontext des Browsers.phantom.args[0]
. Re:localToRemoteUrlAccessEnabled=true
ich dachte immer die richtige Eigenschaft warwebSecurityEnabled=false
für same-origin-Fehler... es funktioniert einfach nicht immer zu funktionieren scheint. Dies ist immer Weg von meinem ursprünglichen problem mit dem extjsProxy
, also werde ich versuchen, diese arbeiten, die morgen mit diesem code.ist browser und WebKit, Einschränkung (Sicherheit) und es gibt keine Möglichkeit zu umgehen, außer wenn Sie Ihren eigenen webserver. Es ist ganz einfach mit nodejs. Seine über ein paar Zeilen code ausgeführt werden, der server auf irgendeinem port auf der lokalen Maschine.
Einfach erstellen server.js wie Stelle unten und führen Sie es mit
node server.js
bevor Sie laufen phantomjsHalten Sie diese Datei im Projekt root oder update line
__dirname den Pfad des Ordners, in dem server.js lebt und ist durch die Knoten-Prozess....
nun können Sie keep data/*.json oder auch Erstellung von mock-Daten in Knoten 😉
===Update====
Nach der Lektüre PhantomJS Dokumentation fand ich, dass Sie dasselbe tun wie oben, ohne nodejs. Offenbar PhanotmJS hat alle oben genannten Module enthalten
Betrachten, um zu überprüfen:
Und Sie werden gut zu gehen.
Schrieb ich 2 repos für den Umgang mit ExtJS 4 für unit Tests mit Karma test runner/Jasmin 1.x und 2.0-Versionen und den Umgang mit Async-Probleme: hier sind Sie: https://github.com/cgauthier/karma_jasmine_1_extjs4 und https://github.com/cgauthier/karma_jasmine_2_extjs4.