【发布时间】:2019-08-10 02:42:34
【问题描述】:
我有一个独立的类需要进行角度测试。我想知道如何依赖注入一个模拟服务。
我尝试使用 TestBed 来依赖注入服务。但它不起作用。
// user-setting.ts, class I want to test
constructor(private config: UserSettingDefault, private userSettingsService: UserSettingsService) { }
// user-setting.spec.ts, I try to use TestBed to inject, but failed
class UserSettingsServiceMock {
}
fdescribe('UserSetting', () => {
let userSettingsService: UserSettingsServiceMock
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: UserSettingsService, useClass: UserSettingsServiceMock },
],
});
userSettingsService = TestBed.get(UserSettingsService);
});
it('should create an instance', () => {
const config = { app: 'user', type: 'search', id: 'embeded-link' };
const userSetting = new UserSetting(config, userSettingsService);
expect(userSetting).toBeTruthy();
});
});
我希望我可以为 UserSetting 创建一个新实例。但是抛出一些错误:
ERROR in src/app/core/user/user-settings/user-setting.spec.ts(25,49): error TS2345: Argument of type 'UserSettingsServiceMock' is not assignable to parameter of type 'UserSettingsService'.
Property 'language' is missing in type 'UserSettingsServiceMock'.
【问题讨论】:
-
也许您应该创建一个堆栈闪电战,我们应该能够帮助解决问题
-
userSettingsService 是一项复杂的服务。你知道如何在不注入 userSettingsService 的情况下测试 user-setting.ts 吗?
-
您能否分享更多有关 user-setting.ts 的信息?你说的独立是什么意思?你没有在 Angular 的依赖注入中使用它?
-
好吧...尝试将
language: string或任何类型的语言添加到您的模拟...您可以使模拟和服务使用相同的界面。
标签: angular unit-testing