5

テストに jQuery を挿入しようとしていますが、次のエラーが発生します。

ReferenceError: 変数が見つかりません: $

これは、私がテストしようとしている Ruby on Rails アプリケーションであり、WEBrick で実行されています。すべてのコードは次のとおりです。

var casper = require('casper').create({
    clientScripts: ['jquery-1.9.1.min.js']   
});

//make sure page loads
casper.start('http://127.0.0.1:3000', function() {
    this.test.assertTitle('EZpub', 'EZpub not loaded');
});

//make sure all 3 fridges are displayed
casper.then(function() {
    //get fridges
    var fridges = $('a[href^="/fridges/"]');
    this.test.assert(fridges.length == 3, 'More or less than 3 fridge links shown');
});

casper.run(function() {
    this.echo('Tests complete');
});
4

1 に答える 1

14

ドキュメントから、ロードされたページへの参照を取得するにはevaluate()を使用する必要があるようです

注 このメソッドの背後にある概念は、CasperJS を発見するときにおそらく最も理解しにくいものです。念のため、evaluate() メソッドは、CasperJS 環境と、開いたページの 1 つとの間のゲートと考えてください。クロージャを evaluate() に渡すたびに、ブラウザ コンソールを使用しているかのようにページに入り、コードを実行します。

casper.then(function() {
    var fridges =  casper.evaluate(function(){
        // In here, the context of execution (global) is the same
        // as if you were at the console for the loaded page
        return $('a[href^="/fridges/"]');
    });
    this.test.assert(fridges.length == 3, 'More or less than 3 fridge links shown');
});

ただし、単純なオブジェクトしか返せないことに注意してください。したがって、評価の外で jQuery オブジェクトにアクセスすることはできません (つまり、JS オブジェクトを返すことはできません)。そのため、次のように、テストに必要なものだけを返す必要があります。以下

casper.then(function() {
    var fridgeCount = casper.evaluate(function(){
        // In here, the context of execution (global) is the same
        // as if you were at the console for the loaded page
        return $('a[href^="/fridges/"]').length;
    });
    this.test.assert(fridgeCount === 3, 'More or less than 3 fridge links shown');
});    
于 2013-04-12T21:59:36.667 に答える