我正在从外部库导入类实例,并像这样直接在类成员中使用
import { MyClient } from '@foo/bar';
export class DoStuff {
public getStuff = () => {
return MyClient.fetchThings();
}
}
我要从中导入此类的库,将类导出为:
// my-client.ts
class MyClient {
//stuff
async fetchThings() {
}
}
export const myClient = new MyClient();
-----
// index.ts
export {
myClient as MyClient,
} from './my-client';
我希望能够在正在使用的应用程序的DoStuff类中存入导入的MyClient
类实例,但是我不确定该怎么做。
我当时正在考虑使用ts-mock-imports,但它们的示例似乎涵盖了您想在要测试的类中新建一个导入类的情况。
就我而言,导入的类已经是一个实例。
这里正确的方法是什么?
答案 0 :(得分:1)
正确的方法是使用dependency injection。永远不要直接导入实例,而是让Angular注入实例。这样一来,服务可以轻松mocked by injecting the mocked service。
您可以在MyClient
上创建包装器作为可注入服务,并让Angular将其注入到DoStuff
中。然后,在测试中,您可以通过mocked MyClientService
。
import { MyClientService } from './my-client-service';
export class DoStuff {
myClientService: MyClientService;
constructor(myClientService) {
this.myClientService = myClientService;
}
public getStuff = () => {
return this.myClientService.fetchThings();
}
}
my-client-service.ts:
import { Injectable } from '@angular/core';
import { MyClient } from '@foo/bar';
@Injectable({
providedIn: 'root',
})
export class MyClientService {
myClient: MyClient;
constructor() {
this.myClient = MyClient;
}
fetchThings() {
return this.myClient.fetchThings();
}
}
中的示例