Skip to content

Commit

Permalink
Merge pull request #317 from jankapunkt/improve-tests
Browse files Browse the repository at this point in the history
  • Loading branch information
filipenevola authored Mar 18, 2021
2 parents 466c402 + bb256d4 commit 910a78f
Show file tree
Hide file tree
Showing 13 changed files with 270 additions and 4 deletions.
29 changes: 29 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
version: 2.1

commands:
install:
description: Install puppeteer and headless chrome
steps:
- run:
name: Install Headless Chrome dependencies
command: |
sudo apt-get install -yq \
gconf-service libasound2 libatk1.0-0 libatk-bridge2.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 \
libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 \
libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates \
fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
- run:
name: Install puppeteer with chronium
command: |
npm i puppeteer
jobs:
Blaze Tests:
steps:
- checkout
- run:
name: running ci
command: |
cd test-app
./ci.sh
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@ Thumbs.db
db.json
*.log
.idea
test-app/packages
node_modules
package-lock.json
25 changes: 24 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,27 @@ ln -s /home/user/projects/blaze/packages/blaze-html-templates packages/
...
```

And so on for all the packages.
### Run local tests

The `test-app` folder contains a bare Meteor project you can utilize for local
testing. In order to run local tests, please setup the project first:

#### Setting up the local test environment

Everything is already prepared in scripts:

```bash
$ cd test-app
$ meteor npm install # install dependencies
$ meteor npm run setup # create link to packages
```

This has to be done only once.

#### Run the tests

Simply execute the test script:

```bash
$ meteor npm run test:watch
```
19 changes: 19 additions & 0 deletions test-app/.meteor/.finished-upgraders
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# This file contains information which helps Meteor properly upgrade your
# app when you run 'meteor update'. You should check it into version control
# with your project.

notices-for-0.9.0
notices-for-0.9.1
0.9.4-platform-file
notices-for-facebook-graph-api-2
1.2.0-standard-minifiers-package
1.2.0-meteor-platform-split
1.2.0-cordova-changes
1.2.0-breaking-changes
1.3.0-split-minifiers-package
1.4.0-remove-old-dev-bundle-link
1.4.1-add-shell-server-package
1.4.3-split-account-service-packages
1.5-add-dynamic-import-package
1.7-split-underscore-from-meteor-base
1.8.3-split-jquery-from-blaze
1 change: 1 addition & 0 deletions test-app/.meteor/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
local
7 changes: 7 additions & 0 deletions test-app/.meteor/.id
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# This file contains a token that is unique to your project.
# Check it into your repository along with the rest of this directory.
# It can be used for purposes such as:
# - ensuring you don't accidentally deploy one app on top of another
# - providing package authors with aggregated statistics

ourgjhbe7m.zzee6dwnngho
19 changes: 19 additions & 0 deletions test-app/.meteor/packages
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Meteor packages used by this project, one per line.
# Check this file (and the other files in this directory) into your repository.
#
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.

[email protected] # Packages every Meteor app needs to have
[email protected] # Packages for a great mobile UX
[email protected] # The database Meteor supports right now
static-html # Define static page content in .html files
[email protected] # Reactive variable for tracker
[email protected] # Meteor's client-side reactive programming library

[email protected] # CSS minifier run for production mode
[email protected] # JS minifier run for production mode
[email protected] # ECMAScript 5 compatibility for older browsers
[email protected] # Enable ECMAScript2015+ syntax in app code
[email protected] # Enable TypeScript syntax in .ts and .tsx modules
[email protected] # Server-side component of the `meteor shell` command
2 changes: 2 additions & 0 deletions test-app/.meteor/platforms
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
server
browser
1 change: 1 addition & 0 deletions test-app/.meteor/release
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[email protected]
70 changes: 70 additions & 0 deletions test-app/.meteor/versions
17 changes: 17 additions & 0 deletions test-app/ci.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env bash

meteor npm install

export URL='http://localhost:4096/'

exec 3< <(meteor test-packages --driver-package test-in-console -p 4096 --exclude ${TEST_PACKAGES_EXCLUDE:-''})
EXEC_PID=$!

sed '/test-in-console listening$/q' <&3

meteor node puppeteerRunner.js

STATUS=$?

pkill -TERM -P $EXEC_PID
exit $STATUS
11 changes: 8 additions & 3 deletions test-app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,18 @@
"test": "tests"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"test": "echo \"Error: no test specified\" && exit 1",
"start": "meteor run",
"setup": "ln -sfn ../packages ./packages",
"test:watch": "meteor test-packages --raw-logs ./packages/*",
"test:ci": "ci.sh"
},
"author": "",
"license": "ISC",
"dependencies": {
"jquery": "^3.4.1",
"@babel/runtime": "^7.6.0",
"meteor-node-stubs": "^1.0.0"
"@babel/runtime": "^7.13.10",
"meteor-node-stubs": "^1.0.2",
"puppeteer": "^8.0.0"
}
}
70 changes: 70 additions & 0 deletions test-app/puppeteerRunner.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
const puppeteer = require('puppeteer');

async function runNextUrl(browser) {
const page = await browser.newPage();

page.on('console', msg => {
console.log(msg._text);
});

if (!process.env.URL) {
process.exit(1);
return;
}

await page.goto(process.env.URL);

async function poll() {
if (await isDone(page)) {
let failCount = await getFailCount(page);
if (failCount > 0) {
await page.close();
await browser.close();
process.exit(1);
} else {
await page.close();
await browser.close();
process.exit(0);
}
} else {
setTimeout(poll, 1000);
}
}

poll();
}

async function isDone(page) {
return await page.evaluate(function() {
if (typeof TEST_STATUS !== 'undefined') {
return TEST_STATUS.DONE;
}

return typeof DONE !== 'undefined' && DONE;
});
}

async function getFailCount(page) {
return await page.evaluate(function() {
if (typeof TEST_STATUS !== 'undefined') {
return TEST_STATUS.FAILURES;
}

if (typeof FAILURES === 'undefined') {
return 1;
}

return 0;
});
}

async function runTests() {
console.log(`Running test with Puppeteer at ${process.env.URL}`);

// --no-sandbox and --disable-setuid-sandbox must be disabled for CI compatibility
const browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] });
console.log(`Using version: ${await browser.version()}`);
runNextUrl(browser);
}

runTests();

0 comments on commit 910a78f

Please sign in to comment.