javascript - Kako učitati JSON putem get-a u varijablu u CasperJS skripti
Koristim sljedeći kod za učitavanje nekih JSON podataka u varijablu u svom casperJS skriptu:
var casper = require("casper").create({
verbose: true,
logLevel: 'debug',
pageSettings: {
userName: 'dev',
password: 'devpass',
}
});
var baseUrl = 'http://mysite.com/';
casper.start().then(function() {
this.open(baseUrl + 'JSON-stuff', {
method: 'get',
headers: {
'Accept': 'application/json'
}
});
});
casper.run(function() {
var journalJson = JSON.parse(this.getPageContent());
require('utils').dump(journalJson); //this returns my json stuff as expected
this.exit();
});
Ovo radi kako želim - imam objekt journalJson koji mi je potreban za obradu. Međutim, nisam siguran kako nastaviti s testiranjem. Druge funkcije dodane u casper.run() ne izvršavaju se kako je očekivano... na primjer, ako promijenim funkciju casper.run u:
casper.run(function() {
var journalJson = JSON.parse(this.getPageContent());
require('utils').dump(journalJson);
this.open(baseUrl).then(function () {
this.assertExists('#header');
});
this.exit();
});
tada phantomjs bilježi da je URL zatražen, ali test se nikada ne izvršava.
Moje pitanje: Kako mogu pristupiti JSON-u putem GET zahtjeva, a zatim ga koristiti za izvođenje testova? Mislim da mi nešto nedostaje...
Odgovor #1
Pozivate casper.exit() prije nego što je vaš then povratni poziv moguće izvršen.
Pokušaj umjesto toga nešto ovako:
casper.then(function() { // <-- no more run() but then()
var journalJson = JSON.parse(this.getPageContent());
require('utils').dump(journalJson);
});
casper.thenOpen(baseUrl, function() {
this.test.assertExists('#header'); // notice: this.test.assertExists, not this.assertExists
});
casper.run(function() {
this.test.done();
});
