https://github.com/iensu/mocha-cakes-2
A BDD plugin for Mocha testing framework
https://github.com/iensu/mocha-cakes-2
bdd cucumber gherkin javascript mocha mocha-cakes nodejs tdd testing typescript
Last synced: 2 months ago
JSON representation
A BDD plugin for Mocha testing framework
- Host: GitHub
- URL: https://github.com/iensu/mocha-cakes-2
- Owner: iensu
- License: mit
- Created: 2016-02-15T22:22:04.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2018-03-27T15:50:16.000Z (about 7 years ago)
- Last Synced: 2025-01-31T16:53:37.612Z (3 months ago)
- Topics: bdd, cucumber, gherkin, javascript, mocha, mocha-cakes, nodejs, tdd, testing, typescript
- Language: JavaScript
- Homepage:
- Size: 425 KB
- Stars: 43
- Watchers: 3
- Forks: 10
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Mocha Cakes 2
Mocha Cakes is a [Gherkin](https://github.com/cucumber/cucumber/wiki/Gherkin)/[Cucumber](https://cucumber.io/) syntax integration for the [Mocha](https://mochajs.org/) testing framework.
[](https://travis-ci.org/iensu/mocha-cakes-2)
[](http://spiceprogram.org/oss-sponsorship)## Installation
NPM:
```
npm install --save-dev mocha-cakes-2
```## Usage
### Enable the mocha-cakes-2 integration
To enable the Mocha integration you need to specify `mocha-cakes-2` in the `ui` option.
#### CLI
Either use the command line argument:
``` javascript
mocha --ui mocha-cakes-2 path/to/my/tests
```Or set it in your [`mocha.opts`](https://mochajs.org/#mochaopts) file:
``` javascript
--ui mocha-cakes-2
```#### API
Either pass it in the options as you construct Mocha:
``` javascript
var mocha = new Mocha({
ui: 'mocha-cakes-2'
});
```Or set it after you've constructed Mocha:
``` javascript
var mocha = new Mocha();
mocha.ui('mocha-cakes-2')
```### Test structure
```javascript
require('chai').should();Feature('Some feature', () => {
Scenario('Some Scenario', () => {
let number = 2;
Given('a number', () => {
number.should.exist;
});
And('that number is 2', () => {
number.should.equal(2);
});When('adding 40', () => {
number += 40;
});Then('the number should be 42', () => {
number.should.equal(42);
});
});
});
```The result will look something like this:
The common Mocha functions (`describe`, `it`, `before`, `after`, etc) are also available and can be used together with Mocha Cakes.
### Upgrading from version 1.x
Replace the `require('mocha-cakes-2')` statement(s) with the `--ui mocha-cakes-2` option as described above.
### TypeScript
The TypeScript definitions are bundled together with mocha-cakes-2.
To use mocha directly with TypeScript you need types for mocha and [ts-node](https://github.com/TypeStrong/ts-node).```
npm install --save-dev typescript ts-node @types/mocha
```You should have a `tsconfig.json` in the root of your project like so
```json
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node"
}
}
```Now you can run it like so:
```
mocha -r ts-node/register --ui mocha-cakes-2 ...
```Your tests should look like this:
```
import 'mocha-cakes-2';Feature('Some feature', () => {
Scenario('Some Scenario', () => {
let number = 2;
Given('a number', () => {
});
And('that number is 2', () => {});
When('adding 40', () => {
});
Then('the number should be 42', () => {
});
});
});
```## API
The Mocha Cakes integration adds the following functions to the global scope:
* `Feature | feature`
* `Scenario | scenario`
- `Given | given`
- `When | when`
- `Then | then`
- `And | and`
- `But | but`### `.skip`
Skips a test clause. Works on all test functions.
```javascript
Feature('Some feature', () => {Scenario.skip('Skipped scenario', () => {
// ...
});Scenario('Ordinary', () => {
// ...
});
});
```
### `.only`
Only run the specified test clause. Works on all test functions.
```javascript
Feature('Some feature', () => {Scenario('First scenario', () => {
// ...
});Scenario('Second scenario', () => {
// ...
});Scenario.only('Only I will run!', () => {
// ...
});// ...
});
```
### `beforeEachScenario` and `afterEachScenario`
Executes the provided function only once for each of the scenarios under the current scope.
```javascript
Feature('Some feature', () => {beforeEachScenario( () => {
someSetup();
});afterEachScenario( () => {
doCleanup();
});Scenario('First scenario', () => {
// ...
});Scenario('Second scenario', () => {
// ...
});// ...
});
```### `beforeEachFeature` and `afterEachFeature`
Executes the provided function only once for each of the features under the current scope.
```javascript
beforeEachFeature( () => {
someSetup();
});afterEachFeature( () => {
doCleanup();
});Feature('Some feature', () => {
// ...
});Feature('Another feature', () => {
// ...
});// ...
```## Development
### Testing the CLI and API interfaces
If you use Mocha directly to run the tests you can set the `MOCHA_INTERFACE` environment variable to either `cli` or `api` to choose which Mocha interface to run the tests with: `MOCHA_INTERFACE=api mocha test/feature/tests.js`.
`MOCHA_INTERFACE` will default to `cli` if no value is set.
When you run `npm run test:cli` or `npm run test:api` (or `npm test` to run them both), `MOCHA_INTERFACE` is set automatically to the appropriate value.
## Acknowledgements
Mocha Cakes 2 is heavily influenced by **quangv**'s [mocha-cakes](https://github.com/quangv/mocha-cakes/).