mirror of
https://github.com/ascribe/onion.git
synced 2024-12-22 09:23:13 +01:00
Add config
This commit is contained in:
parent
e24cca1c12
commit
9a7dbb55ea
2
.env-template
Normal file
2
.env-template
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
ONION_SAUCELABS_USER=ascribe
|
||||||
|
ONION_SAUCELABS_APIKEY=
|
@ -3,7 +3,6 @@
|
|||||||
"env": {
|
"env": {
|
||||||
"browser": true,
|
"browser": true,
|
||||||
"es6": true,
|
"es6": true,
|
||||||
"mocha": true
|
|
||||||
},
|
},
|
||||||
"rules": {
|
"rules": {
|
||||||
"new-cap": [2, {newIsCap: true, capIsNew: false}],
|
"new-cap": [2, {newIsCap: true, capIsNew: false}],
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -22,3 +22,4 @@ node_modules/*
|
|||||||
build
|
build
|
||||||
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
.env
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
"babel-jest": "^5.2.0",
|
"babel-jest": "^5.2.0",
|
||||||
"chai": "^3.4.1",
|
"chai": "^3.4.1",
|
||||||
"chai-as-promised": "^5.1.0",
|
"chai-as-promised": "^5.1.0",
|
||||||
|
"dotenv": "^1.2.0",
|
||||||
"jest-cli": "^0.4.0",
|
"jest-cli": "^0.4.0",
|
||||||
"mocha": "^2.3.4",
|
"mocha": "^2.3.4",
|
||||||
"wd": "^0.4.0"
|
"wd": "^0.4.0"
|
||||||
|
36
tests/.eslintrc
Normal file
36
tests/.eslintrc
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"parser": "babel-eslint",
|
||||||
|
"env": {
|
||||||
|
"mocha": true,
|
||||||
|
"node": true
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"new-cap": [2, {newIsCap: true, capIsNew: false}],
|
||||||
|
"quotes": [2, "single"],
|
||||||
|
"eol-last": [0],
|
||||||
|
"no-mixed-requires": [0],
|
||||||
|
"no-underscore-dangle": [0],
|
||||||
|
"global-strict": [2, "always"],
|
||||||
|
"no-trailing-spaces": [2, { skipBlankLines: true }],
|
||||||
|
"no-console": 0,
|
||||||
|
"camelcase": [2, {"properties": "never"}],
|
||||||
|
},
|
||||||
|
"globals": {},
|
||||||
|
"plugins": [],
|
||||||
|
"ecmaFeatures": {
|
||||||
|
"modules": 1,
|
||||||
|
"arrowFunctions",
|
||||||
|
"classes": 1,
|
||||||
|
"blockBindings": 1,
|
||||||
|
"defaultParams": 1,
|
||||||
|
"destructuring": 1,
|
||||||
|
"objectLiteralComputedProperties": 1,
|
||||||
|
"objectLiteralDuplicateProperties": 0,
|
||||||
|
"objectLiteralShorthandMethods": 1,
|
||||||
|
"objectLiteralShorthandProperties": 1,
|
||||||
|
"restParams": 1,
|
||||||
|
"spread": 1,
|
||||||
|
"superInFunctions": 1,
|
||||||
|
"templateStrings": 1
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,7 @@ and how we are doing it.
|
|||||||
|
|
||||||
|
|
||||||
# How it works (bird's-eye view)
|
# How it works (bird's-eye view)
|
||||||
|
|
||||||
You will notice that the setup is a bit convoluted. This section will explain
|
You will notice that the setup is a bit convoluted. This section will explain
|
||||||
you why. Testing single functions in JavaScript is not that hard (if you don't
|
you why. Testing single functions in JavaScript is not that hard (if you don't
|
||||||
need to interact with the DOM), and can be easily achieved using frameworks
|
need to interact with the DOM), and can be easily achieved using frameworks
|
||||||
@ -27,12 +28,17 @@ browsers) to run our tests.
|
|||||||
|
|
||||||
## Components and tools
|
## Components and tools
|
||||||
|
|
||||||
|
Right now we are just running the test locally, so no Continuous Integration™.
|
||||||
|
|
||||||
The components involved are:
|
The components involved are:
|
||||||
- **[Selenium WebDriver](https://www.npmjs.com/package/wd)**: it's a library
|
- **[Selenium WebDriver](https://www.npmjs.com/package/wd)**: it's a library
|
||||||
that can control a browser. You can use the **WebDriver** to load new URLs,
|
that can control a browser. You can use the **WebDriver** to load new URLs,
|
||||||
click around, fill out forms, submit forms etc. It's basically a way to
|
click around, fill out forms, submit forms etc. It's basically a way to
|
||||||
control remotely a browser. There are other implementations in Python, PHP,
|
control remotely a browser. There are other implementations in Python, PHP,
|
||||||
Java, etc.
|
Java, etc. Also, a **WebDriver** can be initialized with a list of [desired
|
||||||
|
capabilities](https://code.google.com/p/selenium/wiki/DesiredCapabilities)
|
||||||
|
describing which features (like the platform, browser name and version) you
|
||||||
|
want to use to run your tests.
|
||||||
|
|
||||||
- **[Selenium Grid](https://github.com/SeleniumHQ/selenium/wiki/Grid2)**: it's
|
- **[Selenium Grid](https://github.com/SeleniumHQ/selenium/wiki/Grid2)**: it's
|
||||||
the controller for the cluster of machines/devices that can run browsers.
|
the controller for the cluster of machines/devices that can run browsers.
|
||||||
@ -46,7 +52,66 @@ The components involved are:
|
|||||||
cluster to run your tests on over 700 combinations of browsers/operating
|
cluster to run your tests on over 700 combinations of browsers/operating
|
||||||
systems. (They do other things, check out their websites).
|
systems. (They do other things, check out their websites).
|
||||||
|
|
||||||
|
- **[SauceConnect](https://wiki.saucelabs.com/display/DOCS/Setting+Up+Sauce+Connect)**:
|
||||||
|
it allows Saucelabs to connect to your `localhost` to test the app. (There
|
||||||
|
is also a [Node.js wrapper](https://www.npmjs.com/package/sauce-connect), so
|
||||||
|
you can use it programmatically within your code for tests).
|
||||||
|
|
||||||
|
|
||||||
|
On the JavaScript side, we use:
|
||||||
|
- [Mocha](https://mochajs.org/): a test framework running on Node.js.
|
||||||
|
|
||||||
|
- [chai](http://chaijs.com/): a BDD/TDD assertion library for node that can be
|
||||||
|
paired with any javascript testing framework.
|
||||||
|
|
||||||
|
- [chaiAsPromised](https://github.com/domenic/chai-as-promised/): an extension
|
||||||
|
for Chai with a fluent language for asserting facts about promises. The
|
||||||
|
extension is actually quite cool, we can do assertions on promises without
|
||||||
|
writing callbacks but just chaining operators. Check out their `README` on
|
||||||
|
GitHub to see an example.
|
||||||
|
|
||||||
|
- [dotenv](https://github.com/motdotla/dotenv): a super nice package to loads
|
||||||
|
environment variables from `.env` into `process.env`.
|
||||||
|
|
||||||
|
|
||||||
## Anatomy of a test
|
## Anatomy of a test
|
||||||
A test is a `.js` file. We use [Mocha](https://mochajs.org/) and [Should](https://shouldjs.github.io/).
|
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
require('dotenv').load();
|
||||||
|
|
||||||
|
const wd = require('wd');
|
||||||
|
const chai = require('chai');
|
||||||
|
const chaiAsPromised = require('chai-as-promised');
|
||||||
|
chai.use(chaiAsPromised);
|
||||||
|
chai.should();
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
describe('Login logs users in', function() {
|
||||||
|
let browser;
|
||||||
|
|
||||||
|
before(function() {
|
||||||
|
browser = wd.promiseChainRemote('ondemand.saucelabs.com', 80,
|
||||||
|
process.env.ONION_SAUCELABS_USER || 'ascribe',
|
||||||
|
process.env.ONION_SAUCELABS_APIKEY || 'b072b4f2-6302-42f6-a25d-47162666ca66');
|
||||||
|
|
||||||
|
return browser.init({ browserName: 'chrome' });
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
return browser.get('http://www.ascribe.ninja/app/login');
|
||||||
|
});
|
||||||
|
|
||||||
|
after(function() {
|
||||||
|
return browser.quit();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should contain "Log in" in the title', function() {
|
||||||
|
return browser.title().should.become('Log in');
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
```
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
require('dotenv').load();
|
||||||
|
|
||||||
const wd = require('wd');
|
const wd = require('wd');
|
||||||
const chai = require("chai");
|
const chai = require('chai');
|
||||||
const chaiAsPromised = require("chai-as-promised");
|
const chaiAsPromised = require('chai-as-promised');
|
||||||
chai.use(chaiAsPromised);
|
chai.use(chaiAsPromised);
|
||||||
chai.should();
|
chai.should();
|
||||||
|
|
||||||
@ -12,10 +14,10 @@ describe('Login logs users in', function() {
|
|||||||
|
|
||||||
before(function() {
|
before(function() {
|
||||||
browser = wd.promiseChainRemote('ondemand.saucelabs.com', 80,
|
browser = wd.promiseChainRemote('ondemand.saucelabs.com', 80,
|
||||||
process.env.ONION_SAUCELABS_USER || 'ascribe',
|
process.env.ONION_SAUCELABS_USER,
|
||||||
process.env.ONION_SAUCELABS_APIKEY || 'b072b4f2-6302-42f6-a25d-47162666ca66')
|
process.env.ONION_SAUCELABS_APIKEY);
|
||||||
|
|
||||||
return browser.init({ browserName: 'chrome' });
|
return browser.init({ browserName: 'chrome' });
|
||||||
});
|
});
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
|
Loading…
Reference in New Issue
Block a user