在我们的角度应用程序中,我们使用环境文件来加载一些配置。
环境.ts
export const environment = {
production: false,
defaultLocale: 'en_US',
};
然后我们在我们的一项服务中使用它:
import { environment } from '../../environments/environment';
import { TranslateService } from './translate.service';
@Injectable()
export class LocaleService {
constructor(private translateService: TranslateService){}
useDefaultLocaleAsLang(): void {
const defaultLocale = environment.defaultLocale;
this.translateService.setUsedLang(defaultLocale);
}
}
因此,我在服务方法中使用环境文件中的值。
在我们的测试文件中,我们当然可以监视translateService:
translateService = jasmine.createSpyObj('translateService', ['setUsedLang']);
但我不知道如何模拟我的测试文件中的环境值(在beforeEach
例如)。或者甚至为了测试目的将其转换为Subject
所以我可以改变它并测试不同的行为。
更一般地说,如何在测试中模拟此类导入值以确保不使用真实值?
你无法测试/模拟environment.ts
。它不是 Angular DI 系统的一部分,它是对文件系统上文件的硬依赖。 Angular 的编译过程使得能够交换不同的environment.*.ts
当你进行构建时,文件会隐藏在幕后。
Angular 的 DI 系统是一种典型的面向对象方法,用于使应用程序的某些部分更具可测试性和可配置性。
我的建议是充分利用 DI 系统并谨慎使用类似的东西
import { environment } from '../../environments/environment';
相反,对 Angular 想要您抽象出来的任何依赖项执行相同的操作。提供一项服务,在两者之间提供接缝environment.ts
数据和您的应用程序部分。
它不需要有任何逻辑,它可以简单地传递environment
直接(因此不需要自行测试)。
然后更新您依赖的服务/组件environment.ts
并将该依赖项替换为服务。在测试时,您可以模拟它,从其他地方获取数据environment.ts
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)