@bahmutov/cy-grep 1.8.0 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -62,6 +62,7 @@ Watch the video [intro to cypress-grep plugin](https://www.youtube.com/watch?v=H
62
62
  - [Required tags](#required-tags)
63
63
  - [Negative grep](#negative-grep)
64
64
  - [TypeScript support](#typescript-support)
65
+ - [grepPrefixAt](#grepprefixat)
65
66
  - [General advice](#general-advice)
66
67
  - [DevTools console](#devtools-console)
67
68
  - [grepFailed](#grepfailed)
@@ -538,6 +539,19 @@ If you have `tsconfig.json` file, add this library to the types list
538
539
  }
539
540
  ```
540
541
 
542
+ ## grepPrefixAt
543
+
544
+ Using test tags that start with `@` is so common, you can enforce it using the env option `grepPrefixAt: true`. This lets you use `@tag1,@tag2, ...` or `tag1,tag2, ...` when calling.
545
+
546
+ ```
547
+ # use grepPrefixAt in your env settings object
548
+ # use { tags: '@tag1' } in your tests
549
+
550
+ # then these two are equivalent
551
+ --env grepTags=@tag1
552
+ --env grepTags=tag1
553
+ ```
554
+
541
555
  ## General advice
542
556
 
543
557
  - keep it simple.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bahmutov/cy-grep",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "Filter Cypress tests using title or tags",
5
5
  "main": "src/support.js",
6
6
  "scripts": {
package/src/plugin.js CHANGED
@@ -22,11 +22,13 @@ function getGrepSettings(config) {
22
22
  console.log('cy-grep: tests with "%s" in their names', grep.trim())
23
23
  }
24
24
 
25
+ const grepPrefixAt = env.grepPrefixAt || env['grep-prefix-at']
26
+
25
27
  const grepTags = env.grepTags || env['grep-tags']
26
28
 
27
29
  if (grepTags) {
28
30
  console.log('cy-grep: filtering using tag(s) "%s"', grepTags)
29
- const parsedGrep = parseGrep(null, grepTags)
31
+ const parsedGrep = parseGrep(null, grepTags, grepPrefixAt)
30
32
 
31
33
  debug('parsed grep tags %o', parsedGrep.tags)
32
34
  }
@@ -51,7 +53,11 @@ function getGrepSettings(config) {
51
53
 
52
54
  const grepFilterSpecs = env.grepFilterSpecs === true
53
55
 
54
- return { grep, grepTags, grepFilterSpecs }
56
+ if (grepPrefixAt) {
57
+ console.log('cy-grep: all tags will be forced to start with @')
58
+ }
59
+
60
+ return { grep, grepTags, grepFilterSpecs, grepPrefixAt }
55
61
  }
56
62
 
57
63
  /**
@@ -63,7 +69,8 @@ function cypressGrepPlugin(config) {
63
69
  return config
64
70
  }
65
71
 
66
- const { grep, grepTags, grepFilterSpecs } = getGrepSettings(config)
72
+ const { grep, grepTags, grepFilterSpecs, grepPrefixAt } =
73
+ getGrepSettings(config)
67
74
 
68
75
  if (grepFilterSpecs) {
69
76
  const specFiles = getSpecs(config)
@@ -74,7 +81,7 @@ function cypressGrepPlugin(config) {
74
81
 
75
82
  if (grep) {
76
83
  console.log('cy-grep: filtering specs using "%s" in the title', grep)
77
- const parsedGrep = parseGrep(grep)
84
+ const parsedGrep = parseGrep(grep, undefined, grepPrefixAt)
78
85
 
79
86
  debug('parsed grep %o', parsedGrep)
80
87
  greppedSpecs = specFiles.filter((specFile) => {
@@ -105,7 +112,7 @@ function cypressGrepPlugin(config) {
105
112
  debug('found grep "%s" in %d specs', grep, greppedSpecs.length)
106
113
  debug('%o', greppedSpecs)
107
114
  } else if (grepTags) {
108
- const parsedGrep = parseGrep(null, grepTags)
115
+ const parsedGrep = parseGrep(null, grepTags, grepPrefixAt)
109
116
  debug('parsed grep tags %o', parsedGrep)
110
117
  const mentionedTags = getMentionedTags(grepTags)
111
118
  debug('user mentioned tags %o', mentionedTags)
package/src/support.js CHANGED
@@ -61,12 +61,23 @@ function registerCyGrep() {
61
61
  getPluginConfigValue('grepOmitFiltered') ||
62
62
  getPluginConfigValue('grep-omit-filtered')
63
63
 
64
- debug('grep %o', { grep, grepTags, grepBurn, omitFiltered, version })
64
+ const grepPrefixAt =
65
+ getPluginConfigValue('grepPrefixAt') ||
66
+ getPluginConfigValue('grep-prefix-at')
67
+
68
+ debug('grep %o', {
69
+ grep,
70
+ grepTags,
71
+ grepBurn,
72
+ omitFiltered,
73
+ grepPrefixAt,
74
+ version,
75
+ })
65
76
  if (!Cypress._.isInteger(grepBurn) || grepBurn < 1) {
66
77
  throw new Error(`Invalid grep burn value: ${grepBurn}`)
67
78
  }
68
79
 
69
- const parsedGrep = parseGrep(grep, grepTags)
80
+ const parsedGrep = parseGrep(grep, grepTags, grepPrefixAt)
70
81
 
71
82
  debug('parsed grep %o', parsedGrep)
72
83
 
package/src/utils.js CHANGED
@@ -38,12 +38,13 @@ function parseFullTitleGrep(s) {
38
38
  /**
39
39
  * Parses tags to grep for.
40
40
  * @param {string|string[]} s Tags string like "@tag1+@tag2", or array of tags
41
+ * @param {boolean} grepPrefixAt Prefix all tags with "@" if needed
41
42
  * @example
42
43
  * parseTagsGrep('@tag1+@tag2')
43
44
  * @example
44
45
  * parseTagsGrep(['@tag1', '@tag2'])
45
46
  */
46
- function parseTagsGrep(s) {
47
+ function parseTagsGrep(s, grepPrefixAt = false) {
47
48
  if (!s) {
48
49
  return []
49
50
  }
@@ -99,6 +100,17 @@ function parseTagsGrep(s) {
99
100
  }
100
101
  }
101
102
 
103
+ if (grepPrefixAt) {
104
+ const prefix = '@'
105
+ ORS_filtered.forEach((OR) => {
106
+ OR.forEach((token) => {
107
+ if (token.tag && !token.tag.startsWith(prefix)) {
108
+ token.tag = prefix + token.tag
109
+ }
110
+ })
111
+ })
112
+ }
113
+
102
114
  return ORS_filtered
103
115
  }
104
116
 
@@ -229,10 +241,10 @@ function shouldTestRun(
229
241
  )
230
242
  }
231
243
 
232
- function parseGrep(titlePart, tags) {
244
+ function parseGrep(titlePart, tags, grepPrefixAt) {
233
245
  return {
234
246
  title: parseFullTitleGrep(titlePart),
235
- tags: parseTagsGrep(tags),
247
+ tags: parseTagsGrep(tags, grepPrefixAt),
236
248
  }
237
249
  }
238
250