2

我正在尝试使用 CasperJS 测试页面,特别是我想戳一堆数据模型。假设我有一个名为 tax 的基本函数,我想确保它使用正确的税率。所以我想要类似的东西:

 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

使用assertEvalEquals()方法。

于 2012-12-06T20:55:17.323 回答
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

如果您在全局范围内隐式调用它(即直接 javascript,而不是例如 $('taxes')),则可能必须显式地将窗口或文档命名空间添加到引用:

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