Tester Coverage: Code coverage collector has been already started

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Valicek1
Člen | 3
+
0
-

Ahoj,

zkouším zprovoznit generování coverage v PHP 7.0.9 (pod Arch Linuxem), Nette, Tester i Testbench jsou aktuální stable. Systém též aktuální. Problém je, že s –coverage padají všechny testy na chybu uvedenou v předmětu. Jak s PHPDBG, tak s XDebug. Moje znalosti bohužel nestačí na odbourání testbench, testy nedokážu spustit bez něj – nemůže to dělat on?

Všechny cache, temp složky a tak dál jsem vyčistil. Aplikace má upravenou strukturu adresářů, tak aby se snadno nahrála na server s IPSConfigem – /www je /web/www, všechny ostatní věci (app, temp, log) byly přesunuty do /web/private. Normální testy chodí pod PHP 5.6.23, PHP 7.0.9 i PHP 7.1.0beta1.

Tester spouštím ze skriptu příkazem

web/private/vendor/bin/run-tests \
	--temp web/private/temp/testbench \
	--colors 1 \
	-p /usr/bin/php-cgi \
	--coverage coverage.html \
	--coverage-src web/private/app/ \
	-c tests/php-coverage.ini \
	./tests

s tím, že konfigurace v ini souboru je

[PHP]
extension=pdo_mysql.so
extension=mysqli.so
zend_extension=xdebug.so
xdebug.remote_enable=on
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

Po několika hodinách zkoušení se proto obracím na fórum, zdali by jste mi nedokázali poradit, kam se podívat. Zkoušel jsem googlovat, koukat do zdrojáků testeru a evidentně dělám něco špatně, jen nemůžu přijít na to, co.

FAILED: tests/Model/UserManager.authenticate.phpt
   Exited with error code 255 (expected 0)
   LogicException: Code coverage collector has been already started.

   in src/CodeCoverage/Collector.php(28)
   in src/Framework/Environment.php(56) Tester\CodeCoverage\Collector::start()
   in testbench/src/Bootstrap.php(23) Tester\Environment::setup()
   in tojemi.cz/tests/bootstrap.php(27) Testbench\Bootstrap::setup()
   in tests/Model/UserManager.authenticate.phpt(10) require()

Děkuji za rady.

EDIT: V Sandboxu to chodí bez problému.

Editoval Valicek1 (24. 7. 2016 1:29)

Milo
Nette Core | 1283
+
0
-

IMHO, voláš 2× Environment::setup(). Jednou sám, podruhé Testbench.

mrtnzlml
Člen | 140
+
0
-

@Valicek1 Ahoj, je to jak píše @Milo. V dev-master už lze zavolat Testbench s tímto bootstrapem:

<?php

require __DIR__ . '/../vendor/autoload.php';

\Tester\Environment::setup();

Testbench\Bootstrap::setup(__DIR__ . '/_temp', function (Nette\Configurator $configurator) {
	//...
});

V tomto případě je ohlídáno, že Testbench Tester\Environment::setup nezavolá znovu. Pokud bys měl však toto volání v té closure (na místě tří teček), tak to nebude fungovat, protože to za tebe Testbench vše nastaví a Tester se to pak pokusí nastavit ještě jednou, což vyhodí tu LogicException.

Dnes vydám novou stabilní verzi.

Valicek1
Člen | 3
+
0
-

Děkuji, bylo to tím.