如何使ng测试在出现警告时失败



我刚刚修复了Angular应用程序的单元/组件测试中的几个警告,这些测试使用ng test(与Karma/Jastine一起(运行。

这个过程可能非常耗时,因为发现哪个测试用例实际上导致了警告并不总是显而易见的。

现在我没有任何警告了,我想知道是否有一种方法可以让ng test在出现任何警告时自动失败。

test.ts或初始化测试的地方可能会出现类似的情况。

console.warn = (message) => throw new Error(message);

我不知道我是否会建议这样做,因为警告只是警告,但错误就是错误,应该立即处理。你把它放在哪里只是为了测试也可能很棘手。

在工作区根目录中定义一个额外的文件,例如karma.globals.js,它看起来像:

// add globals for karma test runs
console.warn = (message) => { throw new Error(message); };

现在将其包含在您的根karma.conf.js中,如:

const { join } = require('path');
module.exports = () => {
  return {
    
    // ...
    files: [
      join(__dirname, 'karma.globals.js')
    ]
    // ...
  };
};

一个简单易行的修复方法是test.ts文件中的beforeAll块。它用错误函数替换所有控制台方法。

这样,如果你调用console.log,你就会知道哪些测试会失败。

如果你仍然想在测试单元中使用console.log,那么你可以监视它。但由于共享全局状态,这也很糟糕。

这里有一个例子:

const errorFn = () => { throw new Error('No console logs!'); };
beforeAll(() => Object.keys(console).forEach((fn: string) => (console as any)[fn] = errorFn));

test.ts中,我像这样修补了它,以便在出现错误时也打印堆栈跟踪:

console.error = function (message?: any, ...optionalParams: any[]): void {
  const messages = [message, ...optionalParams];
  const output = messages?.map(x => x.hasOwnProperty('stack') ? x.stack : x);
  fail(`Test contained console error:nn${output.join('n')}`);
};
console.warn = function (message?: any, ...optionalParams: any[]): void {
  console.error(message, ...optionalParams);
};

文件中的位置?就在因果报应.start((之后的底部?

相关内容

最新更新