jer*_*rge 5 testing angular ng-mocks
我正在向一个有角度的项目添加测试。有一项服务从 API 获取一些数据,并根据这些数据创建一些业务实体。
我使用ng-mocks模拟了此服务来测试依赖于它的组件。
原来的服务是这样的:
class DataService {
public getEntityFromApi(): Observable<Entity> {
return http.get(...).pipe(
map(httpResponse => {
return this.createEntityFromApiData(httpResponse);
})
);
}
private createEntityFromApiData(apiData: any): Entity {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
它被嘲笑为:
getMockedServiceProvider() {
const testData = ...;
return MockProvider(DataService, {
getEntityFromApi: () => {
let entity = // duplicated code from the createEntityFromApiData method to create the object from testData
return of(entity);
}
});
}
Run Code Online (Sandbox Code Playgroud)
因此,模拟服务能够返回一个对象,而无需向 API 发出请求,但我必须复制从纯 json 创建对象的代码。
避免模拟服务中出现重复的最佳方法是什么?
createEntityFromApiData原始服务的私有性?在您的情况下,如果您想保留服务中的某些内容,那么有 2 个选项:
如果您想在所有测试中返回相同的假数据,您可以考虑使用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);
},
}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |