Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/testcafe-community/eslint-plugin-testcafe-community


https://github.com/testcafe-community/eslint-plugin-testcafe-community

Last synced: 3 months ago
JSON representation

Awesome Lists containing this project

README

        

# eslint-plugin-testcafe-community

































ESLint rules for TestCafe
from the TestCafe community.

---

## What does it do?

This project provides the global variables `fixture` & `test` for your ESLint
configuration which are specific variables for _TestCafe_. The
[recommended configuration](#recommended-configuration) enables common rules for
best practices when writing tests for TestCafe. The rule descriptions are
provided in the [table](#supported-rules) below.

If you use other test suites (Jest/Mocha), make sure to read the
[compatibility](#compatibility) notes at the bottom.

## Installation

You'll first need to install [ESLint](http://eslint.org):

```sh
npm i eslint --save-dev
```

Next, install `eslint-plugin-testcafe-community`:

```sh
npm install eslint-plugin-testcafe-community --save-dev
```

**Note:** If you installed ESLint globally (using the `-g` flag) then you must
also install `eslint-plugin-testcafe-community` globally.

## Recommended configuration

This plugin export a recommended configuration that enforce good practices.

To enable this configuration use the extends property in your `.eslintrc` config
file:

```json
{
"plugins": ["testcafe-community"],
"extends": "plugin:testcafe-community/recommended"
}
```

You may review our
[example TS/JS package](https://github.com/testcafe-community/eslint-plugin-testcafe-community/tree/master/example)
embedded in this repository for an example configuration and plugin testing.

See
[ESLint documentation](http://eslint.org/docs/user-guide/configuring#extending-configuration-files)
for more information about extending configuration files.

## Supported Rules

✔️ indicates that a rule is recommended for all users.

🛠 indicates that a rule is fixable.

| Name | ✔️ | 🛠 | Description |
| ------------------------------------------------------------------------------------------------------------------------------------------- | --- | --- | ------------------------------------------------------------------------------------- |
| [missing-expect](https://github.com/testcafe-community/eslint-plugin-testcafe-community/blob/master/docs/rules/missing-expect.md) | ✔️ | | Ensure tests have at least one expect. |
| [no-debug](https://github.com/testcafe-community/eslint-plugin-testcafe-community/blob/master/docs/rules/no-debug.md) | ✔️ | | `t.debug()` should not exist permanently, use only for debugging of a test failure. |
| [no-disabled-tests](https://github.com/testcafe-community/eslint-plugin-testcafe-community/blob/master/docs/rules/no-disabled-tests.md) | ✔️ | | Prevent tests from being disabled by `fixture.skip()` or `test.skip()` and forgotten. |
| [no-duplicate-titles](https://github.com/testcafe-community/eslint-plugin-testcafe-community/blob/master/docs/rules/no-duplicate-titles.md) | ✔️ | | All test case titles should be unique. |
| [no-focused-tests](https://github.com/testcafe-community/eslint-plugin-testcafe-community/blob/master/docs/rules/no-focused-tests.md) | ✔️ | | Don't allow a single test or fixture to take all the focus. |

## Compatibility

### `eslint-plugin-testcafe`

This `eslint-plugin-testcafe-community` plugin was a fork from the original
[`eslint-plugin-testcafe`](https://npmjs.com/package/eslint-plugin-testcafe)
project, which has not seen an update since December 2016 (`v0.2.1`). You **do
not** need to install both packages. This package is an expanded replacement for
the original.

### `eslint-plugin-jest` & `eslint-plugin-mocha`

Due to the similarities between Test-Driven Development (TDD) terminology
supported by both [Jest](https://jestjs.io) & [Mocha](https://mochajs.org) and
the matching terminology for TestCafe's API, you may run into lint confusion
errors. This likely happens when your repository includes both Jest/Mocha for
unit tests and TestCafe for End-to-End (E2E) tests.

You have a couple solutions to avoid these issues:

1. **\[RECOMMENDED] Top-level directory overrides**. ESLint configurations work
best with a bare minimum base configuration and then specific overrides
entries per additional plugin configuration you need to add.

This is the recommendation since it best conforms to the conventions of
these frameworks. `Jest` recommends unit testing code is always nearest to
the code it is testing in multiple `__tests__` directories following the
file tree your `src` or `lib` directories. Since E2E tests are written from
a higher level abstraction without regard for how the code actually works,
it is best to keep these files at a project root level `tests` folder. In
relation to your `eslintrc` definition, it is easiest to maintain by
defining all the overrides at the top level so that it is easier to debug
issues. If you want to share the `*.test.{ts,js}` filename convention, then
you should consider the `excludedFiles` directive for specific directories
(similar to #3).

A such configuration would look something like this:

```js
// /.eslintrc.js

module.exports = {
root: true,
ignorePatterns: ["*.json"],
// These would affect all files. Note that overrides are combined not replaced
// extends:[]
// plugins:[]
overrides: [
{
// For Typescript
files: ["*.ts"],
parser: "@typescript-eslint/parser",
parserOptions: {
project: "tsconfig.eslint.json", // Custom lint-only config
sourceType: "module"
},
plugins: ["@typescript-eslint"],
extends: [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking",
"plugin:prettier/recommended"
]
},
{
// TS/JS unit tests (inherits any matches from above)
// Make sure this entry is specific enough (through regex or excludedFiles)
// not to match the same files as the e2e files
files: ["*.spec.{js,ts}", "**/__tests__/**.{js,ts}"],
env: {
"jest/globals": true
},
extends: ["plugin:jest/recommended", "plugin:jest/style"],
plugins: ["jest"]
},
{
// Typescript/JavaScript e2e tests (inherits from any matches above)
files: ["tests/**.test.{js,ts}"],
excludedFiles: ["src/**", "lib/**"],
extends: ["plugin:testcafe-community/recommended"],
plugins: ["testcafe-community"]
}
]
};
```

2. **Filename filters**. Use a file naming convention to distinguish the
difference between a unit test and an E2E test. Configure ESLint via
overrides entry to only apply the `jest`/`mocha` plugins to `*.spec.ts` and
`testcafe-community` plugin rules to `*.test.js` files.

3. **Single directory configuration**. Creates a separate folder to house all
your TestCafe specific tests usually at the root level of the project. In
this directory, create another `.eslintrc` configuration file that defines an
override entry for the files in this directory and loads the
testcafe-community plugin/extension.

## Contributors

PR's & Issue contributions welcome! Please adhere to
[contributing guidelines](https://github.com/testcafe-community/eslint-plugin-testcafe-community/blob/master/CONTRIBUTING.md)
or your submission will be closed or delayed.