@bahmutov/cy-grep 1.4.2 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +16 -4
- package/package.json +7 -5
- package/src/plugin.js +42 -28
package/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# @bahmutov/cy-grep ![cypress version](https://img.shields.io/badge/cypress-12.
|
1
|
+
# @bahmutov/cy-grep ![cypress version](https://img.shields.io/badge/cypress-12.7.0-brightgreen)
|
2
2
|
|
3
3
|
> Filter tests using substring or tag
|
4
4
|
|
@@ -19,13 +19,25 @@ All other tests will be marked pending, see why in the [Cypress test statuses](h
|
|
19
19
|
|
20
20
|
If you have multiple spec files, all specs will be loaded, and every test will be filtered the same way, since the grep is run-time operation and cannot eliminate the spec files without loading them. If you want to run only specific tests, use the built-in [--spec](https://on.cypress.io/command-line#cypress-run-spec-lt-spec-gt) CLI argument.
|
21
21
|
|
22
|
-
|
22
|
+
## Training
|
23
23
|
|
24
|
-
|
24
|
+
Watch the video [intro to cypress-grep plugin](https://www.youtube.com/watch?v=HS-Px-Sghd8) and study my 🎓 Cypress course [Cypress Plugins](https://cypress.tips/courses/cypress-plugins):
|
25
|
+
|
26
|
+
- [Lesson k1: Set up the test grep plugin](https://cypress.tips/courses/cypress-plugins/lessons/k1)
|
27
|
+
- [Lesson k2: Filter the tests using test and suite tags](https://cypress.tips/courses/cypress-plugins/lessons/k2)
|
28
|
+
- [Lesson k3: Filter the specs without the tag we want to run](https://cypress.tips/courses/cypress-plugins/lessons/k3)
|
29
|
+
- [Lesson k4: Filter the tests to run using several tags](https://cypress.tips/courses/cypress-plugins/lessons/k4)
|
30
|
+
- [Lesson k5: Filter the tests to run using OR of several tags](https://cypress.tips/courses/cypress-plugins/lessons/k5)
|
31
|
+
- [Lesson k6: Repeat selected tests N times](https://cypress.tips/courses/cypress-plugins/lessons/k6)
|
32
|
+
- [Lesson k7: Pick the tests to run in the interactive mode](https://cypress.tips/courses/cypress-plugins/lessons/k7)
|
33
|
+
|
34
|
+
## Table of Contents
|
25
35
|
|
26
36
|
<!-- MarkdownTOC autolink="true" -->
|
27
37
|
|
28
38
|
- [@bahmutov/cy-grep ](#bahmutovcy-grep-)
|
39
|
+
- [Training](#training)
|
40
|
+
- [Table of Contents](#table-of-contents)
|
29
41
|
- [Install](#install)
|
30
42
|
- [Support file](#support-file)
|
31
43
|
- [Config file](#config-file)
|
@@ -72,7 +84,7 @@ npm i -D @bahmutov/cy-grep
|
|
72
84
|
yarn add -D @bahmutov/cy-grep
|
73
85
|
```
|
74
86
|
|
75
|
-
**Note**: @bahmutov/cy-grep
|
87
|
+
**Note**: @bahmutov/cy-grep should work with all Cypress versions, but I mostly test it on the newest versions.
|
76
88
|
|
77
89
|
### Support file
|
78
90
|
|
package/package.json
CHANGED
@@ -1,26 +1,28 @@
|
|
1
1
|
{
|
2
2
|
"name": "@bahmutov/cy-grep",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.5.0",
|
4
4
|
"description": "Filter Cypress tests using title or tags",
|
5
5
|
"main": "src/support.js",
|
6
6
|
"scripts": {
|
7
7
|
"cy:run": "cypress run --config specPattern='**/unit.js'",
|
8
8
|
"cy:open": "cypress open --e2e -b electron --config specPattern='**/unit.js'",
|
9
9
|
"badges": "npx -p dependency-version-badge update-badge cypress",
|
10
|
-
"semantic-release": "semantic-release"
|
10
|
+
"semantic-release": "semantic-release",
|
11
|
+
"deps": "npm audit --report --omit dev"
|
11
12
|
},
|
12
13
|
"dependencies": {
|
13
14
|
"cypress-plugin-config": "^1.2.0",
|
14
15
|
"debug": "^4.3.2",
|
15
|
-
"find-
|
16
|
+
"find-cypress-specs": "^1.29.4",
|
17
|
+
"find-test-names": "1.28.1",
|
16
18
|
"globby": "^11.0.4"
|
17
19
|
},
|
18
20
|
"devDependencies": {
|
19
|
-
"cypress": "12.
|
21
|
+
"cypress": "12.7.0",
|
20
22
|
"cypress-each": "^1.11.0",
|
21
23
|
"cypress-expect": "^3.1.0",
|
22
24
|
"prettier": "^2.8.1",
|
23
|
-
"semantic-release": "^20.1.
|
25
|
+
"semantic-release": "^20.1.1",
|
24
26
|
"typescript": "^4.7.4"
|
25
27
|
},
|
26
28
|
"peerDependencies": {
|
package/src/plugin.js
CHANGED
@@ -1,27 +1,19 @@
|
|
1
|
+
// @ts-check
|
1
2
|
const debug = require('debug')('cy-grep')
|
2
3
|
const globby = require('globby')
|
4
|
+
|
5
|
+
const { getSpecs } = require('find-cypress-specs')
|
3
6
|
const { getTestNames, findEffectiveTestTags } = require('find-test-names')
|
4
7
|
const fs = require('fs')
|
8
|
+
const path = require('path')
|
5
9
|
const { version } = require('../package.json')
|
6
10
|
const { parseGrep, shouldTestRun } = require('./utils')
|
7
11
|
|
8
|
-
|
9
|
-
* Prints the cy-grep environment values if any.
|
10
|
-
* @param {Cypress.ConfigOptions} config
|
11
|
-
*/
|
12
|
-
function cypressGrepPlugin(config) {
|
13
|
-
if (!config || !config.env) {
|
14
|
-
return config
|
15
|
-
}
|
12
|
+
const isCypressV9 = (config) => !('specPattern' in config)
|
16
13
|
|
14
|
+
function getGrepSettings(config) {
|
17
15
|
const { env } = config
|
18
16
|
|
19
|
-
if (!config.specPattern) {
|
20
|
-
throw new Error(
|
21
|
-
'Incompatible versions detected, cy-grep requires Cypress 10.0.0+',
|
22
|
-
)
|
23
|
-
}
|
24
|
-
|
25
17
|
debug('cy-grep plugin version %s', version)
|
26
18
|
debug('Cypress config env object: %o', env)
|
27
19
|
|
@@ -58,20 +50,24 @@ function cypressGrepPlugin(config) {
|
|
58
50
|
console.log('cy-grep: will omit filtered tests')
|
59
51
|
}
|
60
52
|
|
61
|
-
const { specPattern, excludeSpecPattern } = config
|
62
|
-
const integrationFolder = env.grepIntegrationFolder || process.cwd()
|
63
|
-
|
64
53
|
const grepFilterSpecs = env.grepFilterSpecs === true
|
65
54
|
|
55
|
+
return { grep, grepTags, grepFilterSpecs }
|
56
|
+
}
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Prints the cy-grep environment values if any.
|
60
|
+
* @param {Cypress.ConfigOptions} config
|
61
|
+
*/
|
62
|
+
function cypressGrepPlugin(config) {
|
63
|
+
if (!config || !config.env) {
|
64
|
+
return config
|
65
|
+
}
|
66
|
+
|
67
|
+
const { grep, grepTags, grepFilterSpecs } = getGrepSettings(config)
|
68
|
+
|
66
69
|
if (grepFilterSpecs) {
|
67
|
-
|
68
|
-
debug('excludeSpecPattern', excludeSpecPattern)
|
69
|
-
debug('integrationFolder', integrationFolder)
|
70
|
-
const specFiles = globby.sync(specPattern, {
|
71
|
-
cwd: integrationFolder,
|
72
|
-
ignore: excludeSpecPattern,
|
73
|
-
absolute: true,
|
74
|
-
})
|
70
|
+
const specFiles = getSpecs(config)
|
75
71
|
|
76
72
|
debug('found %d spec files', specFiles.length)
|
77
73
|
debug('%o', specFiles)
|
@@ -86,7 +82,7 @@ function cypressGrepPlugin(config) {
|
|
86
82
|
const text = fs.readFileSync(specFile, { encoding: 'utf8' })
|
87
83
|
|
88
84
|
try {
|
89
|
-
const names = getTestNames(text)
|
85
|
+
const names = getTestNames(text, false)
|
90
86
|
const testAndSuiteNames = names.suiteNames.concat(names.testNames)
|
91
87
|
|
92
88
|
debug('spec file %s', specFile)
|
@@ -127,7 +123,7 @@ function cypressGrepPlugin(config) {
|
|
127
123
|
const requiredTags = testTags[testTitle].requiredTags
|
128
124
|
return shouldTestRun(
|
129
125
|
parsedGrep,
|
130
|
-
|
126
|
+
undefined,
|
131
127
|
effectiveTags,
|
132
128
|
false,
|
133
129
|
requiredTags,
|
@@ -173,7 +169,25 @@ function cypressGrepPlugin(config) {
|
|
173
169
|
}
|
174
170
|
|
175
171
|
if (greppedSpecs.length) {
|
176
|
-
config
|
172
|
+
if (isCypressV9(config)) {
|
173
|
+
debug('setting selected %d specs (< v10)', greppedSpecs.length)
|
174
|
+
// @ts-ignore
|
175
|
+
const integrationFolder = config.integrationFolder
|
176
|
+
const relativeNames = greppedSpecs.map((filename) =>
|
177
|
+
path.relative(integrationFolder, filename),
|
178
|
+
)
|
179
|
+
debug(
|
180
|
+
'specs in the integration folder %s %s',
|
181
|
+
integrationFolder,
|
182
|
+
relativeNames.join(', '),
|
183
|
+
)
|
184
|
+
// @ts-ignore
|
185
|
+
config.testFiles = relativeNames.join(',')
|
186
|
+
} else {
|
187
|
+
debug('setting selected %d specs (>= v10)', greppedSpecs.length)
|
188
|
+
// @ts-ignore
|
189
|
+
config.specPattern = greppedSpecs
|
190
|
+
}
|
177
191
|
} else {
|
178
192
|
// hmm, we filtered out all specs, probably something is wrong
|
179
193
|
console.warn('grep and/or grepTags has eliminated all specs')
|