Karma: Using autoWatch with a **/* glob doesn't update the reports

Created on 27 Jun 2016  路  1Comment  路  Source: karma-runner/karma

Expected behavior

autoWatch should work and report correct results with glob matchers of src/app/**/*.js

Actual behavior

Reports are not updating to the correct result in autoWatch when using a matcher like src/app/**/*.js

Enviroment Details

  • Karma version (output of karma --version):
    1.1.0
  • Relevant part of your karma.config.js file
    files

    Steps to reproduce the behaviour

I've prepared an example project at -
https://github.com/shairez/karma-autowatch-problem-example

  • Before going through the steps below, clone the project

Here are the steps:

  1. karma start
  2. Verify that you see the Executed 1 of 1 SUCCESS message
  3. Go to registration.component.spec.js
  4. On line 25 change ctrl.createAccount() to ctrl.createAccount2()
  5. You should see a failing test message in the karma report, but you see the same SUCCESS message from before

    It is solved when you change the glob matcher

I managed to find out that it's got to do with the glob matcher in the files configuration in karma.conf.js.

  1. Go to karma.conf.js,
  2. Comment line 12 where it says 'src/app/**/*.js'
  3. Uncomment line 13 where it says 'src/app/**/*.{component,service}.js'
  4. You should now see the autoWatch works correctly

Bottom line

Something with 'src/app/**/*.js' breaks the autoWatch reporting behavior

help wanted bug

Most helpful comment

The breakage here turns out to be due to the overly broad pattern of src/app/**/*.js - it turns out that this problem is not only limited to the test file being changed, but the watcher failing for any other file modified that falls under a subset of this pattern. One can add throw 'foo' to app.module.js and also see this fail.

What looks like is happening here is that there is a stale promise at https://github.com/karma-runner/karma/blob/master/lib/file-list.js#L346 . If one replaces that line with this.refresh(), this works, but it will cause the test runner to run twice. It is as if karma is serving files from memory instead of the direct file, so the stale ones are run again, which results in the stale test result.

>All comments

The breakage here turns out to be due to the overly broad pattern of src/app/**/*.js - it turns out that this problem is not only limited to the test file being changed, but the watcher failing for any other file modified that falls under a subset of this pattern. One can add throw 'foo' to app.module.js and also see this fail.

What looks like is happening here is that there is a stale promise at https://github.com/karma-runner/karma/blob/master/lib/file-list.js#L346 . If one replaces that line with this.refresh(), this works, but it will cause the test runner to run twice. It is as if karma is serving files from memory instead of the direct file, so the stale ones are run again, which results in the stale test result.

Was this page helpful?
0 / 5 - 0 ratings