2013-12-09 2 views
2

Я использую 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) - не получил ответа.

Приветствия, Виктор

+0

Можете ли вы найти запросы на изображение? GA делает запрос на файл 'gif' с параметрами отслеживания каждый раз, когда он отслеживает что-либо –

+0

Хм, это настройка GA, где вы также размещаете копию отслеживания .gif на своих локальных серверах? Я могу посмотреть на это. Однако в идеале мы хотели бы, чтобы это было чем-то самодостаточным, мы можем запускать локально с помощью CasperJS, как простой тест на дым во время разработки или перед развертыванием. – victorhooi

+0

Нет, GA всегда запускает gif в стандартной настройке. Какая ваша консоль для запроса utm.gif –

ответ

1

Вы должны быть в состоянии прокси вызовы _gaq.нажмите так:

var old_push = _gaq.push; 
_gaq.push = function(options){ 
    console.log("Calling google analytics"); 
    old_push.call(this, options); 
} 
Смежные вопросы