javascript - Karma 没有存储提供程序,但已添加
问题描述
我有以下 spec.ts 文件:
import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
import {OnboardingSliderComponent} from './onboarding-slider.component';
import {IconPipe} from "@shared/pipes/icon/icon.pipe";
import {ActivatedRoute, Router} from "@angular/router";
import {TextService} from "@core/services/text/text.service";
import {Platform} from "@ionic/angular";
import {Storage} from "@ionic/storage";
describe('OnboardingSliderComponent', () => {
let component: OnboardingSliderComponent;
let fixture: ComponentFixture<OnboardingSliderComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [{
provide: TextService,
}, {provide: Platform}, {provide: Router}, {provide: ActivatedRoute}, {provide: Storage}
],
declarations: [OnboardingSliderComponent, IconPipe],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
},)
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(OnboardingSliderComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
如您所见,Storage
应该包括提供程序,但是我仍然收到错误消息:
Error: StaticInjectorError(DynamicTestModule)[Storage]:
StaticInjectorError(Platform: core)[Storage]:
NullInjectorError: No provider for Storage!
at NullInjector.push../node_modules/@angular/core/fesm5/core.js.NullInjector.get (node_modules/@angular/core/fesm5/core.js:8896:1)
at resolveToken (node_modules/@angular/core/fesm5/core.js:9141:1)
at tryResolveToken (node_modules/@angular/core/fesm5/core.js:9085:1)
at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (node_modules/@angular/core/fesm5/core.js:8982:1)
at resolveToken (node_modules/@angular/core/fesm5/core.js:9141:1)
at tryResolveToken (node_modules/@angular/core/fesm5/core.js:9085:1)
at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (node_modules/@angular/core/fesm5/core.js:8982:1)
at resolveNgModuleDep (node_modules/@angular/core/fesm5/core.js:21218:1)
at NgModuleRef_.push../node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get (node_modules/@angular/core/fesm5/core.js:21907:1)
at injectInjectorOnly (node_modules/@angular/core/fesm5/core.js:1774:1)
Expected undefined to be truthy.
at UserContext.<anonymous> (src/app/shared/components/splash-screen/splashScreen.component.spec.ts:25:23)
at ZoneDelegate../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:391:1)
at ProxyZoneSpec.push../node_modules/zone.js/dist/zone-testing.js.ProxyZoneSpec.onInvoke (node_modules/zone.js/dist/zone-testing.js:289:1)
at ZoneDelegate../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (node_modules/zone.js/dist/zone.js:390:1)
解决方案
你不应该使用
providers: [ { provide: InjectableClass } ]
利用:
providers: [ InjectableClass ]
反而。
这是完整的示例:https ://stackblitz.com/edit/angular-twq2h9 。您可以测试这两个选项。
例如,如果您想要模拟依赖项,则需要使用提供对象。
推荐阅读
- typescript - 从元组动态创建一个深度接口
- task - 计划任务和.exe
- php - 为 Apache2 www/html 文件夹添加第二个用户
- security - 基于 IP 地址的“记住我”功能
- c# - CS0175 在此上下文中使用关键字“base”无效
- javascript - 如何从外部来源捕获 console.log?
- bash - Bash 脚本将 ipv4 地址与正则表达式变量匹配
- excel - VBA宏通过特定单元格值过滤表格并删除所有行
- java - 当超类型方法调用超类型和子类型中都存在的方法时调用哪个实例方法
- sql - SQL Server - 使用 Sum Up 连续连接重复和交叉行