Add browser tests (#796)

* Add lmc/steward package and other dependencies
This commit is contained in:
Alexis Saettler
2018-01-13 23:30:37 +01:00
committed by GitHub
parent 7f2d80ec3b
commit ccd63b7e99
12 changed files with 1188 additions and 45 deletions
+1
View File
@@ -12,3 +12,4 @@ monica.sublime-workspace
/storage/oauth-public.key
.DS_Store
npm-debug.log.*
/results
+28 -2
View File
@@ -10,16 +10,42 @@ services:
jdk:
- oraclejdk8
addons:
chrome: stable
before_script:
- cp .env.travis .env
- mysql -e 'create database monica;'
- composer self-update
- composer install --no-interaction
- travis_retry composer install --no-interaction --prefer-dist --no-suggest
# Start Xvfb
- "export DISPLAY=:99.0"
- "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x24"
# Start selenium server
- vendor/bin/selenium-server-standalone -role hub -log selenium-server.log -enablePassThrough false &
- until $(echo | nc localhost 4444); do sleep 1; echo Waiting for selenium hub to start...; done;
# Start selenium node for headless Chrome
- export PATH="$(pwd)/vendor/bin:$PATH"
- vendor/bin/selenium-server-standalone -role node -port 8910 -log selenium-node.log -enablePassThrough false &
- until $(echo | nc localhost 8910); do sleep 1; echo Waiting for selenium node to start...; done;
script:
- php artisan migrate --env=testing --no-interaction -vvv
- php artisan db:seed --env=testing --no-interaction -vvv
- vendor/bin/phpunit --log-junit junit.xml --coverage-clover clover.xml
- vendor/bin/phpunit
# Start http server
- php artisan serve &
- until $(echo | nc localhost 8000); do sleep 1; echo Waiting for laravel server to start...; done;
- vendor/bin/steward run laravel chrome
after_script:
- vendor/bin/steward results -vvv
- cat selenium-server.log
- cat selenium-node.log
- ./travis-sonar.sh
cache:
BIN
View File
Binary file not shown.
+10 -3
View File
@@ -5,6 +5,10 @@
"keywords": ["prm", "crm", "social"],
"type": "project",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/asbiin/steward"
},
{
"type": "vcs",
"url": "https://github.com/asbiin/google2fa-laravel"
@@ -22,7 +26,7 @@
"intervention/image": "^2.3",
"jenssegers/date": "^3.2",
"laravel/cashier": "~7.0",
"laravel/dusk": "^1.1",
"laravel/dusk": "^2.0",
"laravel/framework": "5.5.*",
"laravel/passport": "^4.0",
"laravel/socialite": "^3.0",
@@ -37,11 +41,14 @@
"sentry/sentry-laravel": "^0.7.0"
},
"require-dev": {
"enm1989/chromedriver": "^2.35",
"filp/whoops": "~2.0",
"lmc/steward": "dev-update-dependencies",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~6.0",
"se/selenium-server-standalone": "^3.8",
"symfony/css-selector": "2.8.*|3.0.*",
"symfony/dom-crawler": "2.8.*|3.0.*",
"filp/whoops": "~2.0"
"symfony/dom-crawler": "2.8.*|3.0.*"
},
"autoload": {
"classmap": [
Generated
+1043 -38
View File
File diff suppressed because it is too large Load Diff
+31
View File
@@ -11,6 +11,7 @@
* [Testing environment](#testing-environment)
* [Setup](#setup)
* [Run the test suite](#run-the-test-suite)
* [Run browser tests](#run-browser-tests)
* [Backend](#backend)
* [Things to consider when adding new code](#things-to-consider-when-adding-new-code)
* [Add a new table to the database schema](#add-a-new-table-to-the-database-schema)
@@ -108,6 +109,36 @@ To run the test suite:
* `phpunit` or `./vendor/bin/phpunit` in the root of the folder containing Monica's code from GitHub.
### Run browser tests
To run browser tests, first you need to install some requirements
* Install java:
```
sudo add-apt-repository -y ppa:webupd8team/java
sudo apt -y update
sudo apt -y install oracle-java9-installer
```
* Install Google chrome:
```
curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
sudo apt -y update
sudo apt -y -f install google-chrome-stable fonts-liberation libappindicator1
```
To run the test suite, you need to launch selenium first, then steward :
* Run selenium:
```
vendor/bin/selenium-server-standalone -role hub -log selenium-server.log -enablePassThrough false &
export PATH="$(pwd)/vendor/bin:$PATH"
xvfb-run -s "-ac -screen 0 1280x1024x24" vendor/bin/selenium-server-standalone -role node -port 8910 -log selenium-node.log -enablePassThrough false &
```
* Run the test suite:
```
./vendor/bin/steward -vvv run local chrome
```
## Backend
The project follows strict [object calisthenics](http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php), as much as possible and more and more over time. We will soon implement those rules in the Linters and will block a pull request for the code that does not follow those guidelines.
+4
View File
@@ -46,4 +46,8 @@
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
</php>
<logging>
<log type="coverage-clover" target="./results/clover.xml"/>
<log type="junit" target="./results/junit.xml"/>
</logging>
</phpunit>
+1
View File
@@ -0,0 +1 @@
tests_dir: ./tests/BrowserSelenium
+45
View File
@@ -0,0 +1,45 @@
<?php
namespace Tests\BrowserSelenium;
use Lmc\Steward\ConfigProvider;
use Lmc\Steward\Test\AbstractTestCase;
/**
* Abstract class for custom tests, could eg. define some properties or instantiate some common components in setUp().
*/
abstract class BaseTestCase extends AbstractTestCase
{
/** @var int Default width of browser window (Steward's default is 1280) */
public static $browserWidth = 1280;
/** @var int Default height of browser window (Steward's default is 1024) */
public static $browserHeight = 1024;
/** @var string */
public static $baseUrl;
public function setUp()
{
parent::setUp();
// Set base url according to environment
switch (ConfigProvider::getInstance()->env) {
case 'dev':
self::$baseUrl = env('APP_URL');
break;
case 'laravel':
self::$baseUrl = 'http://127.0.0.1:8000/';
break;
case 'local':
self::$baseUrl = 'http://127.0.0.1/';
break;
default:
throw new \RuntimeException(sprintf('Unknown environment "%s"', ConfigProvider::getInstance()->env));
}
$this->debug('Base URL set to "%s"', self::$baseUrl);
if (ConfigProvider::getInstance()->env == 'production') {
$this->warn('The tests are run against production, so be careful!');
}
}
}
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace Tests\BrowserSelenium;
class SimpleTest extends BaseTestCase
{
/**
* init should be run with "before" phpunit annotation, but it doesn't work !
*/
public function init()
{
$this->wd->get(self::$baseUrl);
}
/**
* A basic browser test example.
*/
public function testBasicExample()
{
$this->init();
$this->assertContains('Monica', $this->wd->getTitle());
}
}
+2 -2
View File
@@ -31,8 +31,8 @@ function CommonParams {
echo -Dsonar.host.url=$SONAR_HOST_URL \
-Dsonar.organization=monicahq \
-Dsonar.php.tests.reportPath=junit.xml \
-Dsonar.php.coverage.reportPaths=clover.xml \
-Dsonar.php.tests.reportPath=./results/junit.xml \
-Dsonar.php.coverage.reportPaths=./results/clover.xml \
-Dsonar.projectVersion=$(php artisan monica:getversion) \
$extra
}
Binary file not shown.