如何在CasperJS脚本中通过get into变量加载JSON

sta*_*ets 6 javascript testing phantomjs casperjs

我正在使用以下代码将一些JSON数据加载到我的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();
});
Run Code Online (Sandbox Code Playgroud)

这就像我想要的那样 - 我有我需要处理的journalJson对象.但是,我不确定如何继续我的测试.添加到casper.run()的其他函数不会按预期执行...例如,如果我将casper run函数更改为:

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

然后phantomjs记录请求url,但测试永远不会运行.

我的问题:如何通过get访问JSON,然后用它来执行测试?我想我在这里遗漏了一些东西......

NiK*_*iKo 6

您可能在执行回调casper.exit()之前打电话then.

尝试这样的事情:

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();
});
Run Code Online (Sandbox Code Playgroud)