如何在角度单元测试中测试独立类?



我有一个独立的类需要用角度进行测试。我想知道我如何为它注入依赖性模拟服务。

我尝试使用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();
});
});

我希望我可以为用户设置创建一个新实例。但是抛出一些错误:

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.language。因此,您还需要模拟此值。

class UserSettingsServiceMock {
language = {};
}

最新更新