我正在向 Angular 项目添加测试。有一项服务从 API 获取一些数据并从这些数据创建一些业务实体。
我使用 ng-mocks 模拟了这个服务来测试依赖它的组件。 .
原始服务如下所示:
class DataService {
public getEntityFromApi(): Observable<Entity> {
return http.get(...).pipe(
map(httpResponse => {
return this.createEntityFromApiData(httpResponse);
})
);
}
private createEntityFromApiData(apiData: any): Entity {
// ...
}
}
它被 mock 为:getMockedServiceProvider() {
const testData = ...;
return MockProvider(DataService, {
getEntityFromApi: () => {
let entity = // duplicated code from the createEntityFromApiData method to create the object from testData
return of(entity);
}
});
}
因此,模拟服务能够在不向 API 发出请求的情况下返回对象,但我必须复制从普通 json 创建对象的代码。在模拟服务中避免这种重复的最佳方法是什么?
createEntityFromApiData
从 mock 的原始服务? 最佳答案
在您的情况下,如果您想从服务中保留某些内容,那么有两种选择:
如果您想在所有测试中返回相同的假数据,您可以考虑使用 ngMocks.defaultMock .
然后您需要在
src/test.ts
中调用一次.ngMocks.defaultMock(DataService, () => ({
getEntityFromApi: () => {
let entity = // duplicated code from the createEntityFromApiData method to create the object from testData
return of(entity);
},
}));
关于angular - 是否可以使用 ng-mocks 从模拟服务中保留一些方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65307175/