Angular 单元测试很烦人:在 Build/Compile 时间找不到问题
Angular Unit Tests are Annoying: Don't find Issues at Build/Compile Time
每次我为 Angular 编写测试时,我的测试都会在 运行 执行时失败,而不是构建时。 No Provider found for this, no provider found, etc NULL,如何在构建编译时找到所有这些问题?而不是在 运行 时间填写缺少的提供者?我所做的就是一直在Google之间来回穿梭。这就是 React 现在拥有最高市场份额的原因。
我用谷歌搜索解决了这个问题,现在还有 10 个,是否有快速有效的解决方案来解决所有这些问题?
NullInjectorError: R3InjectorError(DynamicTestModule)[InjectionToken MatDialogData -> InjectionToken MatDialogData]:
NullInjectorError: No provider for InjectionToken MatDialogData!
当您构建测试时,您必须提供传递给构造函数的所有服务等。由于测试实际上是在尝试 bootstrap 并构建您的 component/service/directive 它需要这些提供程序才能工作。
在您的 beforeEach(() => {})
中,您实际上需要传入需要的 providers/imports 及其默认值 methods/variables。 ng-mocks 是一个很好的库来帮助解决这个问题,它实际上为你生成了一个模拟 service/provider。
这是一个例子:
beforeEach(() =>
TestBed.configureTestingModule({
imports: [HttpClientTestingModule, RouterTestingModule],
providers: [MockProvider(MyTestService)],
}),
);
每次我为 Angular 编写测试时,我的测试都会在 运行 执行时失败,而不是构建时。 No Provider found for this, no provider found, etc NULL,如何在构建编译时找到所有这些问题?而不是在 运行 时间填写缺少的提供者?我所做的就是一直在Google之间来回穿梭。这就是 React 现在拥有最高市场份额的原因。
我用谷歌搜索解决了这个问题,现在还有 10 个,是否有快速有效的解决方案来解决所有这些问题?
NullInjectorError: R3InjectorError(DynamicTestModule)[InjectionToken MatDialogData -> InjectionToken MatDialogData]:
NullInjectorError: No provider for InjectionToken MatDialogData!
当您构建测试时,您必须提供传递给构造函数的所有服务等。由于测试实际上是在尝试 bootstrap 并构建您的 component/service/directive 它需要这些提供程序才能工作。
在您的 beforeEach(() => {})
中,您实际上需要传入需要的 providers/imports 及其默认值 methods/variables。 ng-mocks 是一个很好的库来帮助解决这个问题,它实际上为你生成了一个模拟 service/provider。
这是一个例子:
beforeEach(() =>
TestBed.configureTestingModule({
imports: [HttpClientTestingModule, RouterTestingModule],
providers: [MockProvider(MyTestService)],
}),
);