Gulp 防止因果报应;起毛锉量角器

Gulp 防止因果报应;起毛锉量角器,gulp,karma-runner,protractor,jshint,Gulp,Karma Runner,Protractor,Jshint,有没有办法阻止因果报应和/或量角器在传递给它的流中过滤文件?我们正在使用gulp,但这可能适用于其他自动化工具/环境。虽然我确信他们只是想提供帮助,但这会阻塞我们的控制台,是多余的。更糟糕的是,两次看到相同的错误可能会让人困惑 下面是一个示例任务: var karma = require('karma').server; var spawn = require('child_process').spawn; gulp.task('tests', function() { karma.sta

有没有办法阻止因果报应和/或量角器在传递给它的流中过滤文件?我们正在使用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错误,则无论您是否也运行
gulp JSHint
或其他程序,量角器都会报告该错误

例如,如果文件“my/e2e/test/files/test.e2e.js”如下所示:

describe('some test', function() {

);
... 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 ...
...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...
gulp测试的输出可能如下所示:

describe('some test', function() {

);
... 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 ...
...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...
如果文件“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
的输出可能如下所示:

describe('some test', function() {

);
... 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 ...
...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似乎会使任务失败,并且不会运行,量角器将报告错误但仍在运行,并将报告错误文件中包含的任务中的错误。我宁愿两个流都运行,两组测试都完全运行,并且可能在测试输出中报告语法错误。但是,他们不应该在测试运行之前或之后报告语法错误,因为我们已经为linting文件准备了
gulpjshint
。这只是多余的,如果你已经有了一个linting插件,那么在量角器的情况下,它是多余的两倍


那么,回到我的问题上来:有没有任何方法可以防止业力和/或量角器在它们各自的流中脱毛,与测试的输出分开?有没有办法在不更改源代码的情况下访问各自的错误报告程序?在运行之前,我总是可以在任何错误上杀死它们,但无论如何我可能想运行测试,并且我肯定想运行其他测试框架(例如,如果
.e2e.js
文件中存在语法错误,则运行Karma)。

量角器和Karma都是Javascript引擎的错误(用于测试的浏览器)正在向您喊叫。 因果报应和量角器本身并不是“擦掉”任何东西

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

  • 在karma配置中添加常规浏览器:使用Chrome或Firefox代替PhantomJS

  • 启动karma服务器(不是运行者):在
    Gulpfile.js
    中,将
    singleRun
    true
    更改为
    false

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

  • 现在单击调试按钮,它将打开一个新的选项卡,您可以在其中打开开发工具(如果您使用的是Chrome):

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

解决这些问题,然后尝试在浏览器中再次运行。

一旦一切都被修复,切换回PhantomJS和
singleRun:true

这不是关于linting,而是关于拥有可理解/可解析的代码

您的示例文件“my/e2e/test/files/test.e2e.js”编写得不好,缺少函数close。一些错误可以通过karma、量角器或您的浏览器“理解”,例如缺少分号

但是,诸如不关闭函数之类的错误会破坏对文件的解析,并且解析器不会理解您的意思。
网站中有这样的代码会破坏渲染并导致无法运行。

karma和Digrator是单元和e2e测试的框架,它们一般与linting无关,也与jshint工具无关。你能详细说明发生了什么吗?谢谢。看起来karma和Digrator在一般情况下会更有用他们都是Angular的创建者,有时也会遇到同样的问题。在一般框架中,他们会尽力提供帮助,有些只是越界。你能发布这种行为的输出吗?除非是浏览器控制台报告错误,否则karma不应该真的忽略你的文件。从技术上讲,它看起来像karma正在报告流中的任何错误,我昨天只是不确定。我将更新我的问题。@MarcoCI,alecxe,我扩展了问题并给出了示例。这足够了吗,或者我应该增加或减少…?那么你是说这些是浏览器控制台错误,而不是节点控制台错误?很有趣……我想如果是这样的话,我们必须谢谢!顺便说一句,我使用的是服务器,而不是跑步者,不过我相信这两种情况下Karma都会启动。另外,我使用singleRun,因为没有它Karma不能很好地与gulp一起工作,但对于一次性的事情,它可能会很好。singleRun会与服务器一起启动跑步者,然后退出。如果您需要。只启动服务器可以检查和调试套件。您是对的,Karma&Digrator必须首先解析代码,这会引发错误。我想找到一种方法,防止不可解析的代码进入Karma/Digrator,这就是我发现的困难所在。然后您应该在ka之前运行JSHint任务rma或量角器。如果失败,您的测试将不会执行。我正在运行一个手表,所以我不能只是终止进程。我需要找到一种方法,在运行测试之前停止流,而不停止任何其他流,包括手表流。我相信我已经找到了一种方法。