首页 > 解决方案 > 仅在单元测试期间编译某些类

问题描述

我制作了一个可重用的自定义类来帮助在单元测试期间模拟 localStorage(受此博客文章的启发):

export class MockLocalStorage {

  static mock(store = {}) {
    const mockLocalStorage = {
      getItem: (key: string): string => {
        return key in store ? store[key] : null;
      },
      setItem: (key: string, value: string) => {
        store[key] = `${value}`;
      },
      removeItem: (key: string) => {
        delete store[key];
      },
      clear: () => {
        store = {};
      },
    };

    spyOn(localStorage, 'getItem').and.callFake(mockLocalStorage.getItem);
    spyOn(localStorage, 'setItem').and.callFake(mockLocalStorage.setItem);
    spyOn(localStorage, 'removeItem').and.callFake(mockLocalStorage.removeItem);
    spyOn(localStorage, 'clear').and.callFake(mockLocalStorage.clear);
  }
}

问题是它使用了一些spyOn仅在单元测试期间定义的调用。这会在构建期间导致一些编译错误。

对于这种特定情况,我可以在不使用 spyOn 的情况下重写它,但是由于我需要为单元测试创​​建其他可重用的类,所以我真的很想有一种通用的方法来在正常构建期间排除测试实用程序类。

.spec.ts即使文件不包含任何测试,我也应该使用它来命名文件吗?

标签: angulartypescript

解决方案


您应该能够通过简单地将spyOn函数声明为全局变量来安抚编译器:

declare var spyOn: Function;

推荐阅读