Testing
Tests are intended to be run either on development machines (NODE_ENV=development) or on a test server such as circleci (NODE_ENV=circleci). This documentation concentrates on the development testing experience.
Setup
We use Mocha for unit-testing and Nightwatch for end-to-end (e2e) testing. To run end-to-end tests on your machine you will have to first install Selenium and the Google Chrome Driver manually.
Install Selenium
Download the selenium-server-standalone-2.44.0.jar and move it to bin/selenium-server-standalone-2.44.0.jar
On MacOSX Yosemite, you might also need to install Java (yes, I know... don't look at me this way...). You can download it from this page.
Install the Chrome Driver
Download the chrome driver from https://sites.google.com/a/chromium.org/chromedriver/downloads, unzip it and move it to test/lib/chromedriver
Database
Create an opencollective_test database accessible to user opencollective; each e2e test will reset its schema as required.
$> createdb opencollective_test
$> psql opencollective_test -c "GRANT ALL PRIVILEGES ON DATABASE opencollective_test to opencollective"Code
Check out api, website and app Git repositories, preserving their original directory names.
$> git clone https://github.com/OpenCollective/api.git
$> git clone https://github.com/OpenCollective/website.git
$> git clone https://github.com/OpenCollective/app.gitEnvironment
Create .env files in your api, website and app checkouts:
api/.env file
NODE_ENV=development
WEBSITE_DIR=/path/to/your/opencollective/website
APP_DIR=/path/to/your/opencollective/appwebsite/.env and app/.env files
NODE_ENV=development
API_DIR=/path/to/your/opencollective/api
GITHUB_CLIENT_ID=xxxx [replace with your Github app id]
GITHUB_CLIENT_SECRET=xxx [replace with your Github app client secret]Test
run unit- and e2e-tests:
npm testrun unit-tests:
npm run test:unitrun e2e-tests:
npm run test:e2erun single unit-test: instrument test
describeoritwith.onlyflagrun single e2e-test file:
npm run test:e2e path/to/e2e/test.js, e.g from API directory:npm run test:e2e ../website/test/e2e/public_donation_page.js. The script will detect whether it is awebsiteorapitest file and launch the client and its nightwatch test accordingly.
How to debug an e2e test that failed?
Run the API:
$opencollective-api> PG_DATABASE=opencollective_test npm run devReset the database:
$> curl http://localhost:3060/database/resetRun the website
$opencollective-website> npm run devOpen your browser at the URL of the test that is failing, e.g.
open http://localhost:3000/testcollective
If you want to rerun a particular e2e test file, you can run npm run nightwatch $file (e.g. npm run nightwatch test/e2e/expenses_page.js)
How to debug when GitHub is challenging the oAuth process?
Run the api with the
GITHUB_CLIENT_IDandGITHUB_CLIENT_SECRETenv variables (you can find them here).Run the website, go to http://localhost:3000/opensource/apply and go through the flow. Use the login
opencollectivetestand the password that is stored in 1Password.
Last updated