CaspserJS assertEval包含变量

时间:2014-03-18 08:36:09

标签: casperjs

我想使用CasperJS来评估变量等于某个值。

我尽可能地简化了我的例子:

var testDate = "24/03/14";
casper.test.begin('TEST', 1, function suite(test) {
    casper.start('http://www.google.com/', function() {
        this.test.assertEval(function() {
            return testDate == "24/03/14";
        }, "testDate is 24/03/14" );
    });
    casper.run(function() {
        this.test.done();
    });
});

我不知道它失败的原因,这是我在控制台中得到的结果:

Test file: tests.js
#TEST
FAIL testDate is 24/03/14
#      type: assertEval
#      file: tests.js:7
#      code: }, "testDate is 24/03/14" );
#      subject: null
#      fn: undefined
#      params: undefined
FAIL 1 test executed in 2.896s, 0 passed, 1 failed, 0 dubious, 0 skipped.

Details for the 1 failed test:

In tests.js:7
   TEST
     assertEval: testDate is 24/03/14

有什么想法吗?

更新

我意识到我的简化例子是错误的,它并不代表我真正需要的东西。

实际上,我想要实现的是测试当前页面DOM上下文中的变量是否等于局部变量

3 个答案:

答案 0 :(得分:3)

根据manual Asserteval:

  

断言远程DOM中的代码评估严格解析为布尔值true:

您的testdate变量是casperjs脚本的本地变量,无法在远程dom中访问。您必须将其注入窗口,如描述here

答案 1 :(得分:2)

好的,我自己找到了答案。

为了测试当前页面DOM上下文中的变量是否等于局部变量,我意识到我可以使用简单的assertEvalEquals()

test.assertEvalEquals(function() {
    return variableFromPageDomContext;
}, localVariable);

同样,在测试当前页面DOM上下文中的变量是否与 RegExp模式匹配时,我们必须使用evaluate()从中获取变量DOM是assertMatch()的第一个参数:

test.assertMatch(this.evaluate(function() { 
    return variableFromPageDomContext; 
}), RegExpPattern);

希望可以提供帮助。

答案 2 :(得分:1)

由于@Surreal回答了使用assertEvalEquals()传递函数和期望值的可能性。

然而原始问题想要将一个变量从casperjs上下文传递给assertEval()函数,你可以简单地按如下方式执行,传递给assertEval()三个参数:接收值的函数,一条消息对于断言和值:

var varPassToEval = 'someValue';   
test.assertEval(
        function(varFromCasperContext){
            return varFromPageDomContext === varFromCasperContext;
        },
        'Assert Eval to test', 
        varPassToEval
);

使用上面的示例可能很清楚使用assertEvalEquals()但是对于更复杂的情况可能有用,例如,想象一下你想要检查文本是否出现在<li>内{{1}在DOM中它是动态的并且可以改变,但你最初不知道你的文本在哪里......对于这种情况你可以使用:

<ul>

希望它有所帮助,