更新到 Angular 13 后单元测试失败

Mot*_*lal 8 karma-jasmine angular

更新到 Angular 13 后,我的许多单元测试(在 Angular 12 上运行没有问题)现在都失败了。我发现更令人沮丧的是,测试仅在一起运行时才会失败,而当我使用fdescribe.

我读到,在 Angular 13 中,选项teardown默认设置为 true,因此我尝试在test.ts文件中全局选择退出:

getTestBed().initTestEnvironment(
  BrowserDynamicTestingModule,
  platformBrowserDynamicTesting(), {
    teardown: { destroyAfterEach: false }
  }
);
Run Code Online (Sandbox Code Playgroud)

但这没有用。

我的业力配置:

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine', '@angular-devkit/build-angular'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-junit-reporter'),
      require('karma-coverage'),
      require('karma-mocha-reporter'),
      require('@angular-devkit/build-angular/plugins/karma'),
    ],
    client: {
      clearContext: false, // leave Jasmine Spec Runner output visible in browser
      jasmine: {
        random: false,
      },
    },
    coverageReporter: {
      dir: require('path').join(__dirname, '../../coverage/cockpit'),
      reporters: [
        { type: 'html', subdir: 'report-html' },
        { type: 'lcov', subdir: 'report-lcov' },
        { type: 'text-summary' },
      ],
      fixWebpackSourcePaths: true,
    },
    junitReporter: {
      outputDir: require('path').join(__dirname, '../../junit-report/cockpit'),
      suite: 'cockpit',
      outputFile: 'cockpit-tests-report.xml',
      fixWebpackSourcePaths: true,
    },
    reporters: ['mocha', 'kjhtml', 'coverage', 'junit'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false,
    restartOnFileChange: true,
  });
};
Run Code Online (Sandbox Code Playgroud)

在浏览器控制台中,我看到很多以下错误:

NG0303:无法绑定到“ngTemplateOutlet”,因为它不是“ng-container”的已知属性

我已经没有主意了。

Mot*_*lal 1

该问题是由 ngrx 商店引起的。现在需要重置afterEach块中的选择器

afterEach(() => {
    store.resetSelectors();
    fixture.destroy();
    TestBed.resetTestingModule();
});
Run Code Online (Sandbox Code Playgroud)