javascript - Hvordan man indlæser JSON via get i en variabel i CasperJS-script


Jeg bruger følgende kode til at indlæse nogle JSON-data i en variabel i mit casperJS-script:

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();
});

Dette virker, som jeg ønsker - jeg har journalJson-objektet, som jeg har brug for til min behandling. Jeg er dog ikke sikker på, hvordan jeg skal fortsætte med min testning. Andre funktioner, der tilføjes til casper.run(), udføres ikke som forventet... for eksempel, hvis jeg ændrer casper run-funktionen til:

casper.run(function() {
    var journalJson = JSON.parse(this.getPageContent());
    require('utils').dump(journalJson);
    this.open(baseUrl).then(function () {
        this.assertExists('#header');
    });
    this.exit();
});

så logger phantomjs, at URL'en er blevet anmodet, men testen bliver aldrig kørt.

Mit spørgsmål: Hvordan kan jeg få adgang til JSON via get, og derefter bruge det til at udføre tests? Jeg tror, at jeg mangler noget her...

Svar #1

Du kalder casper.exit() før din then-callback muligvis bliver udført.

Prøv noget som dette i stedet:

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();
});