javascript - Kuinka ladata JSON getin kautta muuttujaan CasperJS-skriptissä
Käytän seuraavaa koodia ladatakseni JSON-dataa muuttujaan casperJS-skriptissäni:
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();
});
Tämä toimii kuten haluan - minulla on journalJson-objekti, jota tarvitsen käsittelyssäni. En kuitenkaan ole varma, miten jatkaa testaustani. Muut funktiot, jotka lisätään casper.run()-metodiin, eivät suoritu odotetusti... esimerkiksi, jos muutan casper.run-funktion seuraavasti:
casper.run(function() {
var journalJson = JSON.parse(this.getPageContent());
require('utils').dump(journalJson);
this.open(baseUrl).then(function () {
this.assertExists('#header');
});
this.exit();
});
sitten phantomjs kirjaa, että URL-osoitetta pyydetään, mutta testiä ei koskaan suoriteta.
Kysymykseni: Kuinka voin käyttää JSON:ia get-pyynnön kautta ja sitten käyttää sitä testien suorittamiseen? Luulen, että minulta puuttuu jotain tässä...
Vastaus #1
Kutsut casper.exit() ennen kuin then-takaisinkutsusi mahdollisesti suoritetaan.
Kokeile sen sijaan jotain tällaista:
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();
});
