我想使用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上下文中的变量是否等于局部变量。
答案 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>
希望它有所帮助,