有没有办法阻止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 }文件)。
答案 0 :(得分:2)
Proractor和Karma都是错误,Javascript引擎(您用于测试的浏览器)正在向您大喊大叫。 Karma和量角器并没有自己“扯掉”任何东西。
要调试Karma中的问题,请执行以下步骤:
为业力配置添加常规浏览器:使用Chrome或Firefox
启动业力服务器(而不是跑步者):在Gulpfile.js
更改singleRun
从true
到false
。
一旦业力和您的浏览器启动,您应该有一个类似的窗口:
现在点击 DEBUG 按钮,它会打开一个新标签,您可以在其中打开开发工具(如果您使用的是Chrome):
现在在Javascript控制台中,您应该能够看到语法错误“Karma正在报告”(实际上业力正在重复Phantom试图说的话)
解决这些问题,然后尝试在浏览器中再次运行
一旦修好了所有内容,请切换回PhantomJS和singleRun: true
。
答案 1 :(得分:1)
它不是关于linting,而是关于可理解/可解析的代码。
您的示例文件" my / e2e / test / files / test.e2e.js"写得不好,你错过了关闭功能。有些错误可以被理解"通过业力,量角器或您的浏览器,就像缺少分号一样。
但是没有关闭函数的错误会破坏文件的解析,解析器不会理解你的意思。 在网站中使用此类代码会破坏渲染并导致无法运行。