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 环境和您打开的页面之间的一道门;每次将闭包传递给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 回答