https://github.com/phenomnomnominal/protractor-use-mocha-hook
Utility method to trick Protractor into using Mocha hooks correctly
https://github.com/phenomnomnominal/protractor-use-mocha-hook
Last synced: 3 months ago
JSON representation
Utility method to trick Protractor into using Mocha hooks correctly
- Host: GitHub
- URL: https://github.com/phenomnomnominal/protractor-use-mocha-hook
- Owner: phenomnomnominal
- License: mit
- Created: 2019-04-19T12:59:26.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2022-12-30T17:30:59.000Z (over 2 years ago)
- Last Synced: 2025-01-12T18:51:01.399Z (4 months ago)
- Language: TypeScript
- Size: 155 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# @phenomnomnominal/protractor-use-mocha-hook
[](https://img.shields.io/npm/v/@phenomnomnominal/protractor-use-mocha-hook.svg)
[](https://codeclimate.com/github/phenomnomnominal/protractor-use-mocha-hook)
[](https://codeclimate.com/github/phenomnomnominal/protractor-use-mocha-hook/coverage)## Installation
```zsh
npm install @phenomnomnominal/protractor-use-mocha-hook --save-dev
```## Why
This package is the culmination of a bunch of attempts to get Mocha hooks working well with Protractor, including when running tests in parallel.
This comment from [Tractor](https://github.com/TradeMe/tractor) describes some of the genesis:
```javascript
// HACK:
// This is a bit weird. We want to run some code after each Mocha spec runs,
// so we can add extra data to the test report.
//
// FIRST ATTEMPT: Use Mocha's `afterEach` in a Protractor plugin.
// Tried calling `afterEach in the `onPrepare` lifecycle took, but
// the global Mocha hooks aren't available yet.
//
// SECOND ATTEMPT: Move hooks to a separate file.
// By moving the hook calls to a separate file, we can push that file into
// the list of specs. This works well when running all the specs in serial,
// but stops working when running them in parallel, as the separate file will
// be run in a separate process.
//
// THIRD ATTEMPT: Use Mocha's `after` hook in a Protractor plugin.
// In the `postTest` part of a Protractor plugin, we have access to the
// `after` hook, so we can use that to attach the hook. Unfortunately,
// the `after` hook happens outside the context of the running test,
// so you can't attach the information to the right test.
//
// FOURTH ATTEMPT: Use Mocha's `afterEach` hook in a Protractor plugin.
// In the `postTest` part of a Protractor plugin, we have access to the
// `afterEach` hook. That's great, and we also have access to the right
// test context. Unfortunately, the hook will be added for *each* test!
// So we have to add a flag and make sure we only add the hook once
// per process.
```This repo contains the *FIFTH* attempt, adding a setter which allows you to add a hook as soon as Mocha has added it to the global context. It is *definitely* still a hack 😅.
## Usage
It can be used when creating an inline Protractor plugin like this:
```javascript
protractorConfig.plugins.push({
inline: {
// use Protractor's setup to get in before Mocha's global `afterEach` hook is created
setup () {
// use `function` over `=>` to let Mocha set `this`:
useMochaHook('afterEach', async function () {
// do something
});
}
}
});
```