@bahmutov/cy-grep 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,7 +25,7 @@ Table of Contents
25
25
 
26
26
  <!-- MarkdownTOC autolink="true" -->
27
27
 
28
- - [@bahmutov/cy-grep](#bahmutovcy-grep)
28
+ - [@bahmutov/cy-grep ](#bahmutovcy-grep-)
29
29
  - [Install](#install)
30
30
  - [Support file](#support-file)
31
31
  - [Config file](#config-file)
@@ -49,6 +49,7 @@ Table of Contents
49
49
  - [TypeScript support](#typescript-support)
50
50
  - [General advice](#general-advice)
51
51
  - [DevTools console](#devtools-console)
52
+ - [grepFailed](#grepfailed)
52
53
  - [Debugging](#debugging)
53
54
  - [Log messages](#log-messages)
54
55
  - [Debugging in the plugin](#debugging-in-the-plugin)
@@ -494,6 +495,16 @@ Cypress.grep('hello', '@smoke', 10)
494
495
 
495
496
  - to remove the grep strings enter `Cypress.grep()`
496
497
 
498
+ ### grepFailed
499
+
500
+ Once the tests finish, you can run just the failed tests from DevTools console
501
+
502
+ ```text
503
+ > Cypress.grepFailed()
504
+ ```
505
+
506
+ **Tip:** use `Cypress.grep()` to reset and run all the tests
507
+
497
508
  ## Debugging
498
509
 
499
510
  When debugging a problem, first make sure you are using the expected version of this plugin, as some features might be only available in the [later releases](https://github.com/cypress-io/cypress-grep/releases).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bahmutov/cy-grep",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Filter Cypress tests using title or tags",
5
5
  "main": "src/support.js",
6
6
  "scripts": {
package/src/index.d.ts CHANGED
@@ -26,6 +26,20 @@ declare namespace Cypress {
26
26
  }
27
27
 
28
28
  interface Cypress {
29
+ /**
30
+ * Runs only the tests that contain the given "grep" string
31
+ * in the title, or have specific tags.
32
+ * @param grep Part of the test title
33
+ * @param tags Tags to filter tests by
34
+ * @param burn Number of times to repeat each test
35
+ */
29
36
  grep?: (grep?: string, tags?: string, burn?: string) => void
37
+ /**
38
+ * Take the current test statuses and run only the failed tests.
39
+ * Run this static method from the DevTools console.
40
+ * Tip: use Cypress.grep() to reset and run all tests.
41
+ * @example Cypress.grepFailed()
42
+ */
43
+ grepFailed?: () => void
30
44
  }
31
45
  }
package/src/support.js CHANGED
@@ -253,4 +253,38 @@ if (!Cypress.grep) {
253
253
  }
254
254
  }
255
255
 
256
+ if (!Cypress.grepFailed) {
257
+ Cypress.grepFailed = function () {
258
+ // @ts-ignore
259
+ let root = Cypress.state('runnable')
260
+ while (root.parent) {
261
+ root = root.parent
262
+ }
263
+ const failedTestTitles = []
264
+
265
+ function findFailedTests(suite) {
266
+ suite.tests.forEach((test) => {
267
+ if (test.state === 'failed') {
268
+ // TODO use the full test title
269
+ failedTestTitles.push(test.title)
270
+ }
271
+ })
272
+ suite.suites.forEach((suite) => {
273
+ findFailedTests(suite)
274
+ })
275
+ }
276
+ findFailedTests(root)
277
+
278
+ if (!failedTestTitles.length) {
279
+ console.log('No failed tests found')
280
+ } else {
281
+ console.log('running only the failed tests')
282
+ console.log(failedTestTitles)
283
+ const grepTitles = failedTestTitles.join(';')
284
+ // @ts-ignore
285
+ Cypress.grep(grepTitles)
286
+ }
287
+ }
288
+ }
289
+
256
290
  module.exports = cypressGrep