6

次のコードを使用して、casperJS スクリプトの変数に JSON データをロードしています。

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

これは私が望むように機能します。処理を行うために必要なジャーナルJsonオブジェクトがあります。ただし、テストを続行する方法がわかりません。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();
});

次に、phantomjs は URL が要求されたことをログに記録しますが、テストは実行されません。

私の質問: get 経由で JSON にアクセスし、それを使用してテストを実行するにはどうすればよいですか? ここで何かが欠けていると思います...

4

1 に答える 1

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();
});
于 2012-10-04T06:18:45.990 に答える