Nette Documentation Preview

syntax
Pomočniki
*********


DomQuery .[#toc-domquery]
-------------------------
`Tester\DomQuery` je razred, ki razširja `SimpleXMLElement` z metodami, ki olajšajo testiranje vsebine HTML ali XML.

```php
# v $html je niz z dokumentom HTML, v $dom dobimo korenski element
$dom = Tester\DomQuery::fromHtml($html);

# we can test the presence of elements using CSS selectors
Assert::true($dom->has('form#registration'));
Assert::true($dom->has('input[name="username"]'));
Assert::true($dom->has('input[type="submit"]'));

# or select elements as array of DomQuery
$elems = $dom->find('input[data-autocomplete]');

# ali preverite, ali element ustreza izbirniku (od različice 2.5.3)
Assert::true($elems[0]->matches('[type="submit"]'));
```


FileMock .[#toc-filemock]
-------------------------
`Tester\FileMock` emulira datoteke v pomnilniku in vam pomaga pri testiranju kode, ki uporablja funkcije, kot so `fopen()`, `file_get_contents()` ali `parse_ini_file()`. Na primer:

```php
# Tested class
class Logger
{
	public function __construct(
		private string $logFile,
	) {
	}

	public function log(string $message): void
	{
		file_put_contents($this->logFile, $message . "\n", FILE_APPEND);
	}
}

# New empty file
$file = Tester\FileMock::create('');

$logger = new Logger($file);
$logger->log('Login');
$logger->log('Logout');

# Created content testing
Assert::same("Login\nLogout\n", file_get_contents($file));
```


Assert::with() .[filter]
------------------------
To ni trditev, temveč pomočnik za testiranje zasebnih metod in lastnosti objektov.

```php
class Entity
{
	private $enabled;
	// ...
}

$ent = new Entity;

Assert::with($ent, function () {
	Assert::true($this->enabled); // dostopno zasebno $ent->enabled
});
```


Helpers::purge() .[filter]
--------------------------
Metoda `purge()` ustvari določen imenik in, če ta že obstaja, izbriše njegovo celotno vsebino. Metoda je priročna za ustvarjanje začasnih imenikov. Na primer v `tests/bootstrap.php`:

```php
@mkdir(__DIR__ . '/tmp');  # @ - directory may already exist

define('TempDir', __DIR__ . '/tmp/' . getmypid());
Tester\Helpers::purge(TempDir);
```


Environment::lock() .[filter]
-----------------------------
Testi se izvajajo vzporedno. Včasih ni treba, da se izvajanje testov prekriva. Običajno morajo testi podatkovne zbirke pripraviti vsebino podatkovne zbirke in jih med izvajanjem testa ne sme nič motiti. V teh primerih uporabimo `Tester\Environment::lock($name, $dir)`:

```php
Tester\Environment::lock('database', __DIR__ . '/tmp');
```

Prvi argument je ime ključavnice. Drugi je pot do imenika za shranjevanje ključavnice. Najprej se izvede test, ki pridobi ključavnico. Drugi testi morajo počakati, da se zaključi.


Environment::bypassFinals() .[filter]
-------------------------------------
Razrede ali metode, označene kot `final`, je težko testirati. Klicanje `Tester\Environment::bypassFinals()` v testnem začetku povzroči, da se ključne besede `final` med nalaganjem kode odstranijo.

```php
require __DIR__ . '/bootstrap.php';

Tester\Environment::bypassFinals();

class MyClass extends NormallyFinalClass  # <-- NormallyFinalClass is not final anymore
{
	// ...
}
```


Environment::setup() .[filter]
------------------------------
- izboljša berljivost izpisa napak (vključena obarvanost), sicer se privzeto izpiše sled sklada PHP
- omogoča preverjanje, ali so bile v testu poklicane trditve, sicer testi brez (npr. pozabljenih) trditev tudi preidejo
- samodejno zažene zbiralnik pokritosti kode, če se uporablja `--coverage` (opisano pozneje)
- na koncu skripte izpiše stanje OK ali FAILURE


Environment::setupFunctions() .[filter]{data-version:2.5}
---------------------------------------------------------
Ustvari globalne funkcije `test()`, `testException()`, `setUp()` in `tearDown()`, v katere lahko razdelite teste.

```php
test('test description', function () {
	Assert::same(123, foo());
	Assert::false(bar());
	// ...
});
```


Environment::VariableRunner .[filter]
-------------------------------------
Omogoča ugotoviti, ali je bil test izveden neposredno ali prek preizkuševalnika.

```php
if (getenv(Tester\Environment::VariableRunner)) {
	# run by Tester
} else {
	# another way
}
```


Environment::VariableThread .[filter]
-------------------------------------
Tester izvaja teste vzporedno v danem številu niti. Število niti bomo poiskali v okoljski spremenljivki, ko nas bo to zanimalo:

```php
echo "I'm running in a thread number " . getenv(Tester\Environment::VariableThread);
```

Pomočniki

DomQuery

Tester\DomQuery je razred, ki razširja SimpleXMLElement z metodami, ki olajšajo testiranje vsebine HTML ali XML.

# v $html je niz z dokumentom HTML, v $dom dobimo korenski element
$dom = Tester\DomQuery::fromHtml($html);

# we can test the presence of elements using CSS selectors
Assert::true($dom->has('form#registration'));
Assert::true($dom->has('input[name="username"]'));
Assert::true($dom->has('input[type="submit"]'));

# or select elements as array of DomQuery
$elems = $dom->find('input[data-autocomplete]');

# ali preverite, ali element ustreza izbirniku (od različice 2.5.3)
Assert::true($elems[0]->matches('[type="submit"]'));

FileMock

Tester\FileMock emulira datoteke v pomnilniku in vam pomaga pri testiranju kode, ki uporablja funkcije, kot so fopen(), file_get_contents() ali parse_ini_file(). Na primer:

# Tested class
class Logger
{
	public function __construct(
		private string $logFile,
	) {
	}

	public function log(string $message): void
	{
		file_put_contents($this->logFile, $message . "\n", FILE_APPEND);
	}
}

# New empty file
$file = Tester\FileMock::create('');

$logger = new Logger($file);
$logger->log('Login');
$logger->log('Logout');

# Created content testing
Assert::same("Login\nLogout\n", file_get_contents($file));

Assert::with()

To ni trditev, temveč pomočnik za testiranje zasebnih metod in lastnosti objektov.

class Entity
{
	private $enabled;
	// ...
}

$ent = new Entity;

Assert::with($ent, function () {
	Assert::true($this->enabled); // dostopno zasebno $ent->enabled
});

Helpers::purge()

Metoda purge() ustvari določen imenik in, če ta že obstaja, izbriše njegovo celotno vsebino. Metoda je priročna za ustvarjanje začasnih imenikov. Na primer v tests/bootstrap.php:

@mkdir(__DIR__ . '/tmp');  # @ - directory may already exist

define('TempDir', __DIR__ . '/tmp/' . getmypid());
Tester\Helpers::purge(TempDir);

Environment::lock()

Testi se izvajajo vzporedno. Včasih ni treba, da se izvajanje testov prekriva. Običajno morajo testi podatkovne zbirke pripraviti vsebino podatkovne zbirke in jih med izvajanjem testa ne sme nič motiti. V teh primerih uporabimo Tester\Environment::lock($name, $dir):

Tester\Environment::lock('database', __DIR__ . '/tmp');

Prvi argument je ime ključavnice. Drugi je pot do imenika za shranjevanje ključavnice. Najprej se izvede test, ki pridobi ključavnico. Drugi testi morajo počakati, da se zaključi.

Environment::bypassFinals()

Razrede ali metode, označene kot final, je težko testirati. Klicanje Tester\Environment::bypassFinals() v testnem začetku povzroči, da se ključne besede final med nalaganjem kode odstranijo.

require __DIR__ . '/bootstrap.php';

Tester\Environment::bypassFinals();

class MyClass extends NormallyFinalClass  # <-- NormallyFinalClass is not final anymore
{
	// ...
}

Environment::setup()

  • izboljša berljivost izpisa napak (vključena obarvanost), sicer se privzeto izpiše sled sklada PHP
  • omogoča preverjanje, ali so bile v testu poklicane trditve, sicer testi brez (npr. pozabljenih) trditev tudi preidejo
  • samodejno zažene zbiralnik pokritosti kode, če se uporablja --coverage (opisano pozneje)
  • na koncu skripte izpiše stanje OK ali FAILURE

Environment::setupFunctions()

Ustvari globalne funkcije test(), testException(), setUp() in tearDown(), v katere lahko razdelite teste.

test('test description', function () {
	Assert::same(123, foo());
	Assert::false(bar());
	// ...
});

Environment::VariableRunner

Omogoča ugotoviti, ali je bil test izveden neposredno ali prek preizkuševalnika.

if (getenv(Tester\Environment::VariableRunner)) {
	# run by Tester
} else {
	# another way
}

Environment::VariableThread

Tester izvaja teste vzporedno v danem številu niti. Število niti bomo poiskali v okoljski spremenljivki, ko nas bo to zanimalo:

echo "I'm running in a thread number " . getenv(Tester\Environment::VariableThread);