javascript - Ako načítať JSON cez get do premennej v skripte CasperJS
Používam nasledujúci kód na načítanie niektorých JSON dát do premennej v mojom skripte casperJS:
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();
});
Toto funguje tak, ako chcem - mám objekt journalJson, ktorý potrebujem na svoje spracovanie. Avšak, nie som si istý, ako pokračovať s mojím testovaním. Iné funkcie pridané do casper.run() sa nevykonávajú podľa očakávania... napríklad, ak zmením funkciu casper.run na:
casper.run(function() {
var journalJson = JSON.parse(this.getPageContent());
require('utils').dump(journalJson);
this.open(baseUrl).then(function () {
this.assertExists('#header');
});
this.exit();
});
Potom PhantomJS zaznamená, že URL bola požadovaná, ale test sa nikdy nespustí.
Moja otázka: Ako môžem získať prístup k JSON cez get a potom ho použiť na vykonávanie testov? Myslím, že mi tu niečo chýba...
Odpoveď č. 1
Voláte casper.exit() pred tým, ako môže byť váš then callback vykonaný.
Skús niečo takéto namiesto toho:
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();
});
