spinen / spinen-php-web-tester
Simple Tester for PHP web sites.
Requires
- php: >=5.6.0
- laravel/framework: 5.3.*
- symfony/dom-crawler: ^3.1
- symfony/process: ^3.1
Requires (Dev)
- fzaninotto/faker: ^1.6
- nesbot/carbon: ^1.21
- phpunit/phpunit: ~5.4
- psy/psysh: 0.7.*
- symfony/var-dumper: 3.1.*
This package is auto-updated.
Last update: 2020-08-15 01:48:31 UTC
README
We were wanting a testing framework very similar to Laravel's to run acceptance-like tests on basic php sites. This was built to help a college class learn about TDD in a dynamic content class. We wanted to use Laravel's constraints that are in the Foundation section, but they no longer subsplit that code out into a read-only Illuminate repository. We are requiring the Laravel Framework just to get the constraints, but it's going to pull in many packages. Therefore, only require this package in the dev section.
Credits
There are huge sections of the code that is in PageAssertions
class that is a complete copy & paste from Laravel's InteractsWithPages
class. We would have just used the class, but it relies too much on booting Laravel, so we wrote our own class & just pulled over the assertions that we could reuse.
Installation
composer require --dev spinen/spinen-php-web-tester
Usage
You can either extend an abstract class that we provide or use the traits that provides the functionality.
- Extend
Spinen\SimplePhpTester\TestCase
so that you will have access to the test. - Mixin the test by
use
ingSpinen\SimplePhpTester\Browser
andSpinen\SimplePhpTester\PageAssertions
in your testfile.
Configuration
The test assumes that your web files are in a directory named public
. If that is not the case, then you have 3 options...
- Add a protected property to your test class named
$web_root
with the name of the directory (i.e.protected $web_root = 'web';
). - Call
setWebRoot
with the directory relative to the directory that you are running phpunit (i.e.$this->setWebRoot('web');
). - Add a protected method to your test class named
determinedFullPath
that builds the full path to the directory of the script being tested.
Assertions
Here is a list of the assertions that are provided...
- assertPageLoaded
- dontSee
- dontSeeElement
- dontSeeInElement
- dontSeeInField
- dontSeeIsChecked
- dontSeeIsSelected
- dontSeeLink
- dontSeeText
- see
- seeElement
- seeInElement
- seeInField
- seeIsChecked
- seeIsSelected
- seeLink
- seeText
Example Test
<?php use Spinen\SimplePhpTester\TestCase; class HomeTest extends TestCase { /** * @test */ public function it_loads_the_home_page() { $this->visit('/') // Could have used $this->visit('/index.php') ->assertPageLoaded(); } /** * @test */ public function it_has_the_expected_title_in_an_h1() { $this->visit('/') ->see('<h1>Some title</h1>'); } /** * @test */ public function it_has_the_the_correct_navigation_links() { $this->visit('/') ->seeLink('Home') ->seeLink('About Us') ->seeLink('Services') ->seeLink('Contact') ->dontSeeLink('Profile'); } }
Troubleshooting
You can call the dump
method on your chain of commands to print out the rendered HTML.