防止 Karma 和量角器检查文件

Prevent Karma & Protractor from Linting Files

有什么方法可以阻止 Karma 和/或量角器对传递给它的流中的文件进行 linting 处理?我们正在使用 gulp,但这可能适用于其他自动化 tools/environments。虽然我确信他们只是想提供帮助,但这会阻塞我们的控制台并且是多余的。更糟糕的是,两次看到相同的错误可能会造成混淆。

这是一个示例任务:

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 任务失败并且不会 运行 如果传递给它的规范文件中有错误,Protractor 会报告错误但仍然 运行,并且会报告错误文件中包含的任务中的错误。我宁愿两个流 运行、两组测试 运行 都完整,并且可能在测试输出中报告语法错误。但是,他们不应该在测试 运行 之前或之后报告语法错误,因为我们已经有 gulp-jshint 用于 linting 文件。这只是多余的,如果你已经有一个 linting 插件,那么它是两倍冗余,在量角器的情况下。

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

Protractor 和 Karma 的错误都是 Javascript 引擎(您用于测试的浏览器)向您喊叫的错误。 Karma 和 Protractor 本身不是 "linting" 任何东西。

要调试 Karma 中的问题,请按照以下步骤操作:

  • 在 karma 配置中添加一个常规浏览器:使用 Chrome 或 Firefox

  • 代替 PhantomJS
  • 启动业力服务器(不是 运行ner):在你的 Gulpfile.js 中将 singleRuntrue 更改为 false .

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

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

  • 现在在 Javascript 控制台中您应该能够看到语法错误 "Karma is reporting"(实际上 karma 只是重复 Phantom 试图说的话)

解决这些问题,然后在浏览器中再次尝试 运行。
一旦一切都已修复切换回 PhantomJS 和 singleRun: true.

这不是 linting,而是 understandable/parsable 代码。

您的示例文件 "my/e2e/test/files/test.e2e.js" 写得不好,您缺少函数关闭。有些错误可能 "understood" 由因果关系、量角器或您的浏览器引起,例如缺少分号。

但是诸如未关闭函数之类的错误会破坏文件的解析,解析器将无法理解您的意思。 在网站中使用此类代码会破坏呈现并导致不 运行.