mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
DOCS Explaining test suite nesting
This commit is contained in:
parent
28be51cab0
commit
f21427d7fa
@ -347,7 +347,7 @@ class SapphireTest extends PHPUnit_Framework_TestCase {
|
|||||||
Injector::unnest();
|
Injector::unnest();
|
||||||
Config::unnest();
|
Config::unnest();
|
||||||
|
|
||||||
if($this->extensionsToReapply || $this->extensionsToRemove || $this->extraDataObjects) {
|
if(!empty($this->extensionsToReapply) || !empty($this->extensionsToRemove) || !empty($this->extraDataObjects)) {
|
||||||
$this->resetDBSchema();
|
$this->resetDBSchema();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -182,18 +182,10 @@ end of each test.
|
|||||||
$page->publish('Stage', 'Live');
|
$page->publish('Stage', 'Live');
|
||||||
}
|
}
|
||||||
|
|
||||||
// reset configuration for the test.
|
// set custom configuration for the test.
|
||||||
Config::nest();
|
|
||||||
Config::inst()->update('Foo', 'bar', 'Hello!');
|
Config::inst()->update('Foo', 'bar', 'Hello!');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tearDown() {
|
|
||||||
// restores the config variables
|
|
||||||
Config::unnest();
|
|
||||||
|
|
||||||
parent::tearDown();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testMyMethod() {
|
public function testMyMethod() {
|
||||||
// ..
|
// ..
|
||||||
}
|
}
|
||||||
@ -224,6 +216,32 @@ individual test case.
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
### Config and Injector Nesting
|
||||||
|
|
||||||
|
A powerful feature of both [`Config`](/developer_guides/configuration/configuration/) and [`Injector`](/developer_guides/extending/injector/) is the ability to "nest" them so that you can make changes that can easily be discarded without having to manage previous values.
|
||||||
|
|
||||||
|
The testing suite makes use of this to "sandbox" each of the unit tests as well as each suite to prevent leakage between tests.
|
||||||
|
|
||||||
|
If you need to make changes to `Config` (or `Injector) for each test (or the whole suite) you can safely update `Config` (or `Injector`) settings in the `setUp` or `tearDown` functions.
|
||||||
|
|
||||||
|
It's important to remember that the `parent::setUp();` functions will need to be called first to ensure the nesting feature works as expected.
|
||||||
|
|
||||||
|
:::php
|
||||||
|
function setUpOnce() {
|
||||||
|
parent::setUpOnce();
|
||||||
|
//this will remain for the whole suite and be removed for any other tests
|
||||||
|
Config::inst()->update('ClassName', 'var_name', 'var_value');
|
||||||
|
}
|
||||||
|
|
||||||
|
function testFeatureDoesAsExpected() {
|
||||||
|
//this will be reset to 'var_value' at the end of this test function
|
||||||
|
Config::inst()->update('ClassName', 'var_name', 'new_var_value');
|
||||||
|
}
|
||||||
|
|
||||||
|
function testAnotherFeatureDoesAsExpected() {
|
||||||
|
Config::inst()->get('ClassName', 'var_name'); // this will be 'var_value'
|
||||||
|
}
|
||||||
|
|
||||||
## Generating a Coverage Report
|
## Generating a Coverage Report
|
||||||
|
|
||||||
PHPUnit can generate a code coverage report ([docs](http://www.phpunit.de/manual/current/en/code-coverage-analysis.html))
|
PHPUnit can generate a code coverage report ([docs](http://www.phpunit.de/manual/current/en/code-coverage-analysis.html))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user