【问题标题】:How to make ng test to fail on warnings如何使 ng 测试因警告而失败
【发布时间】:2020-06-19 08:44:11
【问题描述】:

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

此过程可能非常耗时,因为并不总是很明显地发现实际上是哪个测试用例导致了警告。

所以现在我没有任何警告,我想知道是否有办法让ng test 在出现任何警告时自动失败。

【问题讨论】:

  • 您找到解决方案了吗?

标签: angular jasmine karma-jasmine karma-runner angular-test


【解决方案1】:

test.ts 或初始化测试的某个地方可能会出现这样的情况。

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

我不知道我是否会推荐这个,因为警告就是警告,但错误就是错误,应该立即处理。仅将其放置在测试的位置也很棘手。

【讨论】:

    【解决方案2】:

    一个简单易行的修复方法是在您的 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));
    
    

    【讨论】:

      【解决方案3】:

      在您的工作区根目录中定义一个额外的文件 - 例如名为 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')
          ]
      
          // ...
        };
      };
      

      【讨论】:

        【解决方案4】:

        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:\n\n${output.join('\n')}`);
        };
        
        console.warn = function (message?: any, ...optionalParams: any[]): void {
          console.error(message, ...optionalParams);
        };
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-29
          • 2012-05-27
          相关资源
          最近更新 更多