2

CasperJS を使用してページをテストしようとしています。特に、データ モデルをたくさん突っ込みたいです。税金という基本的な関数があり、正しい税率が使用されるようにしたいとします。だから私は次のようなものが欲しいです:

 this.test.assert(taxes(100, 'Ontario') === 15, "Check ontario tax rate");

フォームに記入して何が印刷されるかを見るのではなく。そのtaxesメソッドはグローバル スコープに存在するため、どこからでも簡単に実行できます (firebug や Chrome のコンソールからも実行できます)。しかし、それがCasperJS内で機能するのは適切な範囲ではありません(私は思う?私はReferenceError: Can't find variable: taxes.

シンプルなものが欠けているようです。

TL;DR: CasperJS テスト内で直接 JS のページ上のビットを実行するにはどうすればよいですか?

4

3 に答える 3

6

使ってみましたevaluate()か?

関連する引用: 「ブラウザー コンソールを使用しているかのようにコードを実行する」

次の行に沿ったもの:

casper.evaluate(function(amount, province) {

    return taxes(amount, province);

}, {100, 'Ontario'});
于 2012-12-06T20:58:53.533 に答える
0

jQuery スタイルの参照を介してメソッドを呼び出す場合は、ReferenceError が発生しないように、ライブラリを明示的に含めるようにしてください。

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

...

casper.start('foo.php', 
   function() { 
      console.log(this.evaluate(function() { 
         return $('taxes').text(); 
      }));
   }); 

casper.run();

参照: https://groups.google.com/forum/#!msg/casperjs/2uyUOqdzShw/bHWrJYXni40J

グローバル スコープで暗黙的に呼び出している場合 (つまり、$('taxes') などではなく、ストレートな JavaScript)、参照の前にウィンドウまたはドキュメントの名前空間を明示的に追加する必要がある場合があります。

document.querySelector('#taxes').value = taxes_text;
于 2012-12-06T21:08:42.960 に答える
0

assertEvalEquals()メソッドを使用します。

于 2012-12-06T20:55:17.323 に答える