Я использую CasperJS для функционального тестирования веб-сайта.Тестирование для Google Analytics JavaScript вызывает страницу с использованием CasperJS?
Одна вещь, которую мы хотели бы протестировать, - это убедиться, что Google Analytics стреляет.
В этом сообщении блога (http://viget.com/extend/testing-google-analytics-with-phantomjs) упоминается использование SinonJS (http://sinonjs.org) с PhantomJS - поэтому я решил, что он должен работать с CasperJS.
Я использую options.clientScripts()
, чтобы ввести скрипт в удаленном 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.
И этот.log предназначен для вызова журнала CasperJS, но я не знаю, будет ли он работать в пределах evaluate()
- и он вообще ничего не делает здесь.
Update: Я также попытался:
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
Update 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 еще не был вызван? Есть ли какой-то способ заставить CasperJS ждать вызова GA, прежде чем запускать файл valu()/SinonJS? Или я, возможно, не вводил его достаточно рано?
Любая идея о том, как правильно настроить SinonJS и CasperJS, чтобы мы могли определить, была ли вызвана GA?
Или кто-нибудь знает о другом способе правильной проверки срабатывания Google Analytics в CasperJS (используя SinonJS или что-то еще)?
Кроме того - полное раскрытие информации - на прошлой неделе я также спросил об этом в группе Google CasperJS (https://groups.google.com/d/topic/casperjs/shqwRoQ-CvE/discussion) - не получил ответа.
Приветствия, Виктор
Можете ли вы найти запросы на изображение? GA делает запрос на файл 'gif' с параметрами отслеживания каждый раз, когда он отслеживает что-либо –
Хм, это настройка GA, где вы также размещаете копию отслеживания .gif на своих локальных серверах? Я могу посмотреть на это. Однако в идеале мы хотели бы, чтобы это было чем-то самодостаточным, мы можем запускать локально с помощью CasperJS, как простой тест на дым во время разработки или перед развертыванием. – victorhooi
Нет, GA всегда запускает gif в стандартной настройке. Какая ваша консоль для запроса utm.gif –