regenerateId of session is disabled.seeLink and dontSeeLinkCodeception\Util\Stub by @davertmik. See #3093 and #3080settings: backup_global to config, to disable backup_global option of PHPUnit by @mkeasling. See #3045. Fixes #3044see matches UTF-8 text case-insensitively by @Naktibalda. Fixes #3114--steps will not disable code coverage. By @Naktibalda. Fixes #2620--quiet by @EspadaV8. See #2370initializeLumen() method has been called twice on start by @kt81. See #3124 #2607seeInDatabase and dontSeeInDatabase with empty criteria. Closes #3116leave() method added to Friend class. See #3068handler and middleware config options to customize Guzzle handlers and middlewaresaveSessionSnapshot with codecoverage. Closes #2923Util\Locator added methods to create locators to match element at their position: elementAt, firstElement, lastElementrebootable_client that reboots client's kernel before each request.seeInField for textarea with whitespaces before and after string. Closes #2921grabServiceFromContainer use grabService instead. For consistency with other frameworks.assert* methods from PHPUnit addedexpectException methodcodecept self-update works with proxy by @gr1ev0uscodeception.yml - settings: lint: falsescrollTo action by @javigomez and @davertmik #2844clearQueue for AmazonSQS by @mikitu #2805amHttpAuthenticated allows null, null as parameters to unset authentication. #2896Util\Locator added contains method to easily locate any element containing a text.guard parameters to seeAuthentication and dontSeeAuthentication methods. By @janhenkgerritsen. See #2876amLoggedAs with an instance of Authenticable. See #2795phantom in WebDriver config in order to use PhantomJS-specific hooks.seeResponseJsonMatchesXpath when JSON contains ampersand. By @Naktibalda.seeNumberNewLines method to check the number of new lines in opened file. By @sergeyklayseeCurrentRouteMatches action by @laszlo-karpati See #2665sqs function to generate unique sequences per suite. #2766 by @johnatannvmdseeOptionIsSelected sees first option as selected if none is selected by @NaktibaldaseeHttpHeader and dontSeeHttpHeader from null to expected value #2697 by @zondorstopFollowingRedirects and startFollowingRedirects by @brutuscatanimate_slides config to disable left-right sliding animation between screenshots by @vml-rmottExternalUrlException when a test tries to open a URL that is not handled by the framework, i.e. an external URL. See #2396ParseException handles syntax error, otherwise linting happens with php -l. @davertmikfilter_var($value, FILTER_VALIDATE_URL)appendField to work with content editable div by @nsanden #2588cache_router added (disabled by default) by @raistlin.services part added to allow access Symfony DIC while wokring with WebDriver or PhpBrowser by @laszlo-karpati See #2629_after by @pfz. See #2572seeInField for textareas by @nsandenenableMiddleware and enableEvents methods. See #2602. By @janhenkgerritsenseeCurrentRouteIs when routes don't match. See #2593. By @maddhatter_getResponseContent hidden method. By @NaktibaldamoveBack method. By @NaktibaldaseeInSource, dontSeeInSource methods to check raw HTML instead of stripped text in see/dontSee. By @zbateson in #2465debugWebDriverLogs in debug mode. Config option debug_log_entries added. See #2471 By @MasonM and @DavertMik.json_last_error_msg function on PHP 5.4. See #2535. By @NaktibaldaseeResponseIsJsonType can now validate emails with string:email definition. By @DavertMikseeResponseIsJsonType: string|null as well as null|string can be used to match null type. #2522 #2500 By @vslovikdepends: Silex in config. By @arduanov #2503expectEvents and added seeEventTriggered and dontSeeEventTriggered. By @janhenkgerritsenseeCurrentRouteIs and seeCurrentActionIs methods. See #2517. By @janhenkgerritsenamOnRoute and seeCurrentRouteIs methods by @sergeyklayseeSessionHasValues by @sergeyklaygetApplication() method by @sergeyklayxdebug.max_nesting_level to 200 only if it is lower. Fixes error hiding #2462 by @mhightowercleanup flag. See #2488. By @ivokundgenerate:suite respect bootstrap setting in #2512. By @dmitrivereshchaginseeResponseMatchesJsonType and dontSeeResponseMatchesJsonType. See #2391_request and _loadPage hidden API methods for performing arbitrary requests.seeInField, dontSeeInField for disabled fields #2378. See #2414.tests/_env by @ZifiusamOnRoute and seeCurrentRouteIs methods by @raistlinamOnRoute and seeCurrentRouteIs methods module, by @NaktibaldaseeCurrentUrlEquals and dontSeeCurrentUrlEquals methods #2324. By @janhenkgerritsen_request() method to send requests to backend from Helper classes.disableEvents(), enableEvents() and expectEvents() methods. By @janhenkgerritsendontSeeFormErrors() method. By @janhenkgerritsenCodeception\Exception\ExternalUrlException when framework module tries to open an external URL #2328. By @NaktibaldaswitchToIframe method. By @Naktibalda_before. 2015-08-08disableMiddleware() and enableMiddleware() methods. By @janhenkgerritsen 2015-08-07tests/_support/_generated directory, it will be created automatically before run.Extension\Recorder navigate over slides with left and right arrow keys, do not create screenshots for comment steps.Extension\Recorder generates index html for all saved records.Extension\Recorder fixed for creating directories twice. Fixed #2216Extension\Logger fixed #2216Stub::makeEmpty on interfaces works again by @Naktibaldagenerate:scenarios fixed for Cest files by @mkudenko See #1962http_proxy and http_proxy_port config options by @jdq22 2015-07-29haveRecord() method in Laravel modules #2217 by @janhenkgerritsen 2015-07-28waitForElementChange fatal error by @stipsanFacebook\WebDriver namespace. Please take that into account when using WebDriver API directly.
Till 2.2 Codeception will keep non-namespaced aliases of WebDriver classes.test.before and test.after events. For instance, WebDriver browser won't be started and Db cleanups won't be executed on incomplete or skipped tests.skip and incomplete enabled in Cest files #2131_findElements($locator) method added to use in Helper classes 2015-07-11
Now you can use $this->getModule('WebDriver')->findElements('.user'); in Helpers to match all elements with user class using WebDriver moduleamOnUrl method to open absolute URLs.fillField using values that contain ampersands by @GawainLynch and @zbateson Issue #2132Annotations in Cept files.
Instead of calling $scenario->skip(), $scenario->group('firefox'), etc, it is recommended to set scenario metadata with annotations // @skip, // @group firefox.
Annotations can be parsed from line or block comments. $scenario->skip() and $scenario->incomplete() are still valid and can be executed inside conditional statements:
if (!extension_loaded('xdebug')) $scenario->skip('Xdebug required')
PSR-4: all support classes moved to tests/_support by default. Actors, Helpers, PageObjects, StepObjects, GroupObjects to follow PSR-4 naming style. Autoloader implemented by @splinter89.
Dependency Injection: support classes can be injected into tests. Support classes can be injected into each other too. This happens by implementing method _inject and explicitly specifying class names as parameters. Implemented by @splinter89.
Actor classes can be extended, their generated parts were moved to special traits in _generated namespace. Each *Tester class can be updated with custom methods.
Module config simplified: Modules can be configured in enabled section of suite config.
Conflicts: module can define conflicts with each other by implementing _conflicts method
Dependencies: module can explicitly define dependencies and expect their injection by implementing _inject and _depends methods and relying on dependency injection container.
Current modules, environment, and test name can be received in scenario. Example: $scenario->current('env') returns current environment name. Fixes #1251
Environment Matrix: environments can be merged. Environment configs can be created in tests/_envs, environment generator added. Implemented by By @sjableka. See #1747
Custom Printers: XML, JSON, TAP, Report printers can be redefined in configuration. See #1425
[Db] Added reconnect option for long running tests, which will connect to database before the test and disconnect after. By @Naktibalda
Module parts. Actions of modules can be loaded partially in order to disable actions which are not used in current tests. For instance, disable web actions of framework modules in unit testsing.
Kohana, Symfony1, Doctrine1 modules considered deprecated and moved to standalone packages.
shuffle added to settings. Randomizes order of running tests. See #1504
Console output improved: scenario stack traces contain files and lines of fail.
[Doctrine2][Symfony2] symfony_em_service config option moved from Doctrine2 to Symfony2 module and renamed to em_service 2015-06-03
[PhpBrowser][Frameworks] Fixed cloning form nodes Codeception\Lib\InnerBrowser::getFormFromCrawler(): ID XXX already defined 2015-05-13
[WebDriver] session snapshot implemented, allows to store cookies and load them, i.e., to keep user session between testss.
[WebDriver][PhpBrowser][Frameworks] Malformed XPath locators wil throw an exception #1441
MODULE_INIT event is fired before initializing modules #1370
Graceful tests termination using pcntl_signal. See #1286
Group classes renamed to GroupObjects; Base GroupObject class renamed to Codeception\GroupObject
Official extensions moved to ext dir; Base Extension class renamed to Codeception\Extension
Duplicate environment options won't cause Codeception to run environment tests twice
[Phalcon1] haveServiceInDi method implemented by @sergeyklay
[Db] seeNumRecords method added by @sergeyklay