gpt4 book ai didi

javascript - 使用 CasperJS 在页面上测试 Google Analytics JavaScript 调用?

转载 作者:行者123 更新时间:2023-11-30 05:41:41 25 4
gpt4 key购买 nike

我正在使用 CasperJS 对网站进行功能测试。

我们想要测试的一件事是确保 Google Analytics 正在触发。

这篇博文 ( http://viget.com/extend/testing-google-analytics-with-phantomjs ) 提到将 SinonJS ( http://sinonjs.org ) 与 PhantomJS 一起使用 - 所以我认为它应该与 CasperJS 一起使用。

我正在使用 options.clientScripts() 将脚本注入(inject)远程 DOM:

casper.options.clientScripts.push("./sinon-1.7.3.js");

然后我尝试在 CasperJS evaluate() 调用中调用它:

    casper.evaluate(function() {
var spy = sinon.spy(_gaq, "push");
console.log(spy.called);
this.log(spy.called, 'debug');
});

但是,console.log 输出似乎没有传递给 CasperJS。

而 this.log 是一个 CasperJS 日志记录调用,但我不知道它是否会在 evaluate() 中工作 - 而且它似乎在这里没有做任何事情完全没有。

更新:我也试过:

    spy = casper.evaluate(function() {
var spy = sinon.spy(_gaq, "push");
return spy;
});
this.log(spy, 'debug');

我得到:

FAIL TypeError: No default value
# type: uncaughtError
# file: test_purchase.js:261
# error: No default value
# TypeError: No default value
# at _replace (/usr/local/Cellar/casperjs/1.1-beta3/libexec/modules/utils.js:261)
# stack: not provided

更新 2:我现在有:

    spy = casper.evaluate(function() {
var spy = sinon.spy(_gaq, "push");
return spy;
});
this.echo('Has GA been called? ' + spy.called, 'debug');

总是返回 false:

Has GA been called? false

我也尝试过使用 waitFor(),但似乎也没有成功:

    spy = casper.evaluate(function() {
var spy = sinon.spy(_gaq, "push");
return spy;
});

this.waitFor(function checkspy() {
return this.evaluate(function() {
return spy.called;
});
}, function then() {
this.echo('Aha - GA has called: ' + spy.called, 'debug');
});

这给了我:

[warning] [phantom] Casper.waitFor() timeout
FAIL "function checkspy() {
return this.evaluate(function() {
return spy.called;
});
}" did not evaluate to something truthy in 5000ms
# type: uncaughtError
# file: test_purchase.js
# error: "function checkspy() {
return this.evaluate(function() {
return spy.called;
});
}" did not evaluate to something truthy in 5000ms

# stack: not provided

我猜这可能是某种时间问题,尚未调用 GA?在运行 evaluate()/SinonJS 之前,有什么方法可以让 CasperJS 等待 GA 调用?或者我可能没有及早注入(inject)它?

知道如何正确设置 SinonJS 和 CasperJS,以便我们可以检测是否已调用 GA 吗?

或者有人知道在 CasperJS 中正确测试 Google Analytics 触发的任何其他方法(使用 SinonJS 或其他东西)吗?

此外 - 完全披露 - 上周我最初也在 CasperJS Google Group ( https://groups.google.com/d/topic/casperjs/shqwRoQ-CvE/discussion ) 上问过这个问题 - 但没有得到太多回应。

干杯,维克多

最佳答案

应该能够像这样代理对 _gaq.push 的调用:

var old_push = _gaq.push;
_gaq.push = function(options){
console.log("Calling google analytics");
old_push.call(this, options);
}

关于javascript - 使用 CasperJS 在页面上测试 Google Analytics JavaScript 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20462812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com