防止Karma&来自Linting Files的量角器

时间:2015-04-15 20:52:36

标签: gulp karma-runner protractor jshint

有没有办法阻止Karma& /或Protractor从传递给它的流中的linting文件?我们正在使用gulp,但这可能适用于其他自动化工具/环境。虽然我确信他们只是试图提供帮助,但这会堵塞我们的控制台并且是多余的。更糟糕的是,两次看到相同的错误可能会令人困惑。

以下是一个示例任务:

var karma = require('karma').server;
var spawn = require('child_process').spawn;

gulp.task('tests', function() {
  karma.start({
    files = 'my/unit/test/files/*.spec.js',
    singleRun: true
  }, function(error) {
    if(error) {
      console.log(error);
    }
  });

  spawn('protractor', ['--specs=my/e2e/test/files/*.e2e.js'],
    {stdio: 'inherit'}
  );
});

如果文件" my / e2e / test / files / test.e2e.js"存在与有一个JSHint错误,Protractor会报告错误,无论你是否还运行gulp-jshint或其他。

例如,如果文件" my / e2e / test / files / test.e2e.js"看起来像这样:

describe('some test', function() {

);

gulp tests的输出可能如下所示:

... some setup...

Protractor:
[09:32:30] An error occurred during the end-to-end testing run
[09:32:30] my/e2e/test/files/test.e2e.js:3
    );
    ^

... some Protractor tests ...
... some Karma tests ...

如果文件" my / unit / test / files / test.spec.js"存在与有一个JSHint错误,Karma将报告此错误,它将无法运行。例如,如果文件" my / unit / test / files / test.spec.js"看起来和" my / e2e / test / files / test.e2e.js"上面,gulp tests的输出可能如下所示:

...some setup...

Karma (I think):
PhantomJS 1.9.8 (Linux) ERROR
  SyntaxError: Parse error
  at my/unit/test/files/test.spec.js

SUMMARY:
✔ 0 tests completed

...some protractor tests...

似乎Karma未通过任务并且如果传递给它的spec文件中存在错误则不会运行,并且Protractor将报告错误但仍然运行,并将报告错误文件中包含的任务中的错误。我希望两个流都运行,两组测试都完全运行,并且可能在测试输出中报告语法错误。但是,他们不应该在测试运行之前或之后报告语法错误,因为我们已经有gulp-jshint用于linting文件。这只是多余的,如果你有一个linting插件,那么它是两倍冗余的,就Protractor而言。

所以,回到我的问题:是否有任何方法可以阻止Karma& /或Protractor在各自的流中进行linting,与测试的输出分开?有没有办法访问他们各自的错误记者,而不更改他们的源代码?在运行之前我总是可以在任何错误上杀死它们,但我可能还是想运行测试,我肯定想运行其他测试框架(例如,如果{{1}中存在语法错误,请运行Karma }文件)。

2 个答案:

答案 0 :(得分:2)

Proractor和Karma都是错误,Javascript引擎(您用于测试的浏览器)正在向您大喊大叫。 Karma和量角器并没有自己“扯掉”任何东西。

要调试Karma中的问题,请执行以下步骤:

  • 为业力配置添加常规浏览器:使用Chrome或Firefox

  • 代替PhantomJS
  • 启动业力服务器(而不是跑步者):在Gulpfile.js更改singleRuntruefalse

  • 一旦业力和您的浏览器启动,您应该有一个类似的窗口: Karma window

  • 现在点击 DEBUG 按钮,它会打开一个新标签,您可以在其中打开开发工具(如果您使用的是Chrome): Debug window

  • 现在在Javascript控制台中,您应该能够看到语法错误“Karma正在报告”(实际上业力正在重复Phantom试图说的话)

解决这些问题,然后尝试在浏览器中再次运行 一旦修好了所有内容,请切换回PhantomJS和singleRun: true

答案 1 :(得分:1)

它不是关于linting,而是关于可理解/可解析的代码。

您的示例文件" my / e2e / test / files / test.e2e.js"写得不好,你错过了关闭功能。有些错误可以被理解"通过业力,量角器或您的浏览器,就像缺少分号一样。

但是没有关闭函数的错误会破坏文件的解析,解析器不会理解你的意思。 在网站中使用此类代码会破坏渲染并导致无法运行。