angular - Angular 5 单元测试:“无法读取注入器中未定义的属性‘get’”
问题描述
我正在使用 Karma-Jasmines 为您的 Web 应用程序编写单元测试 Angular 5。我使用 Injector 来注入服务。
创建 InjectableObject 方法:
import { Injector } from '@angular/core'; let appInjectorRef: Injector; export const InjectableObject = (injector?: Injector): Injector => { if (injector) { appInjectorRef = injector; } return appInjectorRef; };
创建 BaseComponent 类:
import { InjectableObject } from './injectableobject.base'; import { MyDataService} from '../services/mydata.service'; interface IBaseComponentOptions { hotkey?: boolean; tableName?: string } export class BaseComponent implements OnInit, OnDestroy, AfterContentInit{ constructor(private opt?: IBaseComponentOptions) { const _injector = InjectableObject(); this._myDataService = _injector.get(MyDataService); } }
创建一个从 BaseComponent 扩展的组件:
@Component({ selector: 'app-header', templateUrl: './header.component.html', styleUrls: ['./header.component.scss'] }) export class HeaderComponent extends BaseComponent implements OnInit { constructor( private dataService: MyDataService, ){super()} }
创建文件单元测试: import { MessageService } from ''; 从''导入{ HeaderComponent };
describe('HeaderComponent', () => { let component: HeaderComponent; let fixture: ComponentFixture<HeaderComponent>; let backend: MockBackend; beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [HeaderComponent], provides: [MyDataService] }) }).compileComponents(); beforeEach(() => { fixture = TestBed.createComponent(HeaderComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); });
但是当我运行测试时,我得到了这个:
TypeError:无法读取未定义的属性“获取”
在“this._myDataService = _injector.get(MyDataService);” 在基本组件中。
我不知道编写单元测试来通过这种情况。请大家帮帮我!谢谢大家!
解决方案
它与异步调用有关......
用 fakeAsync 调用包装那个测试用例....
it('should create', () => {
fakeAsync(() => {
expect(component).toBeTruthy();
});
});
然后从@angular/core/testing
推荐阅读
- shopify - 如何在 shopify 中启用登录和注册页面
- xcode - 在核心数据 NSFetchRequest 中,得到 NSInvalidArgumentException,无法识别的选择器发送到实例
- ios - 立即加载 UserDefaults(应用存储)
- python - 为什么我在进行任何优化之前得到一个低错误?
- python - 从另一个调用 pytest 函数
- kotlin - Quarkus:REST 资源找不到在测试中创建的实体
- mysql - 多个datagridview数据更新到数据库mysql - vb.net
- flutter - 在小部件之外使用 GetX 观察列表
- uwp - UWP - C# / GraphicsCaptureItem 如何选择我的自我
- spring-boot - 用于启用 SSL 的 Spring Boot Cassandra 配置