测试

我们强烈建议为标记、触发器或变量的JavaScript部分创建测试。您想为PHP部分编写测试吗?查看我们的PHP测试指南

设置

因为这个测试套件还运行常规的Matomo JavaScript跟踪器测试,所以您需要运行一个已安装的Matomo,并确保(database_tests)部分yourmatomo / config / config.ini.php正确配置,即使用正确的密码。

测试将创建一个名为tracker_tests并在此数据库中存储各种跟踪请求。

运行PHP测试

要运行测试,要么打开https://matomo.example.com/tests/javascript/在浏览器中执行phantomjs testrunner.js在命令行中。你可以在这里下载PhantomJS:http://phantomjs.org/

创建测试

要创建一个测试,请创建一个名为插件/ $ yourPlugin /测试/ javascript / index . php

现在你可以像这样定义你的第一个测试:

创建测试所需的主要方法是:

你可以在QUnit API文档

测试标签

您可以使用该方法测试标记TagManagerTestHelper。fireTemplateTag (tagName参数)是这样的:

var customHtmlParameter = TagManagerTestHelper. varbuildVariable('
my foo bar baz test
';//为这个标签配置所需的参数,如果有任何var params = {customHtml: customHtmlParameter)};//用你的标签TagManagerTestHelper的名字替换' CustomHtmlTag 'fireTemplateTag (CustomHtmlTag, params);//我们现在验证元素是由这个标签添加的var addedElement1 = document.getElementById('customHtmlTag1');strictEqual('my foo bar baz test', addedElement1。innerText, '应该添加元素');

测试触发器

您可以使用该方法测试触发器TagManagerTestHelper。setUpTemplateTrigger(triggerName, parameters, callbackwheneventtrigger)是这样的:

//你的触发器可能需要也可能不需要参数var parameters = {};//当触发器触发一个事件时,回调将被执行var events = [];Var回调=函数(事件){events.push(事件);};//用你的触发器TagManagerTestHelper的名字替换' JavaScriptErrorTrigger 'setUpTemplateTrigger('JavaScriptErrorTrigger',参数,回调);//现在我们伪造一个错误窗口。onerror('Uncaught Error: The Error ', '//m.hju8.com/tag/manager.js?cb=348181', 53,19, new Error('The Error '));//现在我们确保错误被添加到deepEqual([{"event": "mtm. txt])JavaScriptError”、“mtm。errorLine": 53, "mtm。errorMessage": "Uncaught Error: The Error ", "mtm. "errorUrl": "//m.hju8.com/tag/manager.js?cb=348181"}],事件,'应该触发一个事件');

测试变量

您可以使用该方法测试变量TagManagerTestHelper。resolveTemplateVariable (variableName参数)是这样的:

//为这个标签配置所需的参数,如果有任何var params = {constantValue: TagManagerTestHelper.buildVariable('mytest')};//替换' ConstantVariable '与你的变量的名字var变量= TagManagerTestHelper。resolveTemplateVariable (ConstantVariable, params);//断言变量strictEqual返回了正确的值('mytest',变量,'返回任何传递的值');

模拟文档或窗口

创建对象的指南中所推荐的方法标签触发,或变量,你不应该访问文档窗口直接在模板中parameters.document而且parameters.window.这允许您在测试中设置自定义文档或窗口。

文档的例子

注入自定义文档可能会有帮助,例如测试一个从cookie或引用器中检索值的变量:

//我们伪造set document var params = {document: {cookie: 'mytest=foobar;loginbaz = helloworld '}};参数个数。cookieName = TagManagerTestHelper.buildVariable('mytest');TagManagerTestHelper strictEqual(“foobar”。resolveTemplateVariable (CookieVariable, params));
var referrerUrl = 'https://apache.matomo:80/index.php?module=CoreHome&action=index&idSite=1&period=day';var params = {document: {referrer: referrerUrl}};strictEqual (referrerUrl TagManagerTestHelper。resolveTemplateVariable (ReferrerUrlVariable, params));

窗口的例子

为了避免污染全局名称空间,我们将变量设置为参数的一部分:

Var params = {window: {myvar1: 'myfootest'}};参数个数。variableName = TagManagerTestHelper.buildVariable('myvar1');TagManagerTestHelper strictEqual(“myfootest”。resolveTemplateVariable (JavaScriptVariable, params));

伪造一个自定义位置也很有用:

var theLocation = {"href":"https://apache.matomo:81/index.php?module=CoreHome&action=index&idSite=1&period=day#foobarhash","祖宗起源":{},"origin":"https://apache.matomo","protocol":"https:","host":"apache.matomo","hostname":"apache.matomo","port":"81","pathname":"/index.php","search":"?module=CoreHome&action=index&idSite=1&period=day","hash":"#foobarhash"};//这里我们模拟一个位置变量params = {window: {location: theLocation}, urlPart: TagManagerTestHelper.buildVariable('href')};strictEqual (theLocation。href TagManagerTestHelper。resolveTemplateVariable (UrlVariable, params));

触发事件

有时可能需要手动触发事件。例如,您想要测试鼠标移动,但实际上无法移动鼠标。在这种情况下,你可以像这样通过编程触发一个事件:

var target = document.getElementById('myelement');var customParams = {clienti: 2, clientX: 5};//设置为空,如果没有自定义参数var气泡= true;TagManagerTestHelper。触发Event(target, 'mouseleave', customParams, bubbles);

异步或延迟事件

在某些情况下,您可能必须等待特定事件发生,因为它会延迟执行。例如,滚动可能只在100ms后才被触发。要做到这一点,你可以暂时“停止”和“开始”测试执行:

窗口。scrollTo (0, 200);停止();var waitForMs = 400;setTimeout(function () {strictEqual(1, scrolls1.)长度,'onScroll,所有注册的事件处理程序接收事件');开始();},后);
Baidu