javascript - 本身具有依赖关系的间谍服务
问题描述
我似乎找不到以下问题的示例。我对我的 NGXS 状态进行了单元测试:
describe('Project store', () => {
let store: Store;
let projectService: ProjectService;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [NgxsModule.forRoot([ProjectState])]
}).compileComponents();
projectService = new ProjectService(); // error: needs httpClient
store = TestBed.get(Store);
}));
it('should load projects', () => {
const EXPECTED_PROJECTS = [
{
"id": "1",
"description": "abc"
},
{
"id": "1",
"description": "abc"
}
] as Project[];
spyOn(projectService, 'loadProjects').and.returnValue(EXPECTED_PROJECTS);
const expected: ProjectStateModel = {
loadedProjects: EXPECTED_PROJECTS,
createdProjects: []
};
store.dispatch(new LoadProjects());
const actual = store.selectSnapshot(ProjectState.getState);
expect(actual).toEqual(expected);
});
});
ProjectService
当它本身需要时,我如何监视它httpClient
?
我找到了有关如何测试需要的服务的示例httpClient
,但现在有关如何模拟需要客户端的服务的示例。
现在我知道我可以自己编写一个模拟服务,但我正在尝试找出是否可以使用 jasmine 间谍来完成。
解决方案
您可以使用HttpTestingController
它来模拟来自您的服务的所需响应,请参见下面的代码:
describe('Project store', () => {
let store: Store;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule,
NgxsModule.forRoot([ProjectState])
],
providers: [ProjectService]
}).compileComponents();
store = TestBed.get(Store);
}));
it('should load projects',
inject([HttpTestingController], (controller: HttpTestingController) => {
const EXPECTED_PROJECTS = [
{ 'id': '1', 'description': 'abc' },
{ 'id': '1', 'description': 'abc' }
] as Project[];
const expected = {
'projectsState': <ProjectStateModel>{
loadedProjects: EXPECTED_PROJECTS,
createdProjects: []
}
};
store.dispatch(new LoadProjects());
// expecting one GET request as a result of LoadProjects action
const testReq = controller.expectOne(req => req.method === 'GET');
// provide mock response
testReq.flush(EXPECTED_PROJECTS);
const actual = store.selectSnapshot(ProjectState.getState);
expect(actual).toEqual(expected);
}));
});
推荐阅读
- r - 尝试根据其他输入的总和在 R Shiny 应用程序中创建动态 UI
- python - 重新分配时按升序对熊猫系列中的值进行排序不起作用
- java - 通过创建方法删除 ArrayList 中的重复项
- python - 如何在尝试将特定 Grakn 实例插入 KG 之前检查它是否已经存在?
- java - 在 Java 中将字符串数组值转换为字节值 - 编组
- javascript - 跳转到下一个代码单元(Jupyter notebook)
- java - 如何解决错误:java.sql.SQLNonTransientConnectionException:无法创建与数据库服务器的连接
- python - 在循环中使用 pysftp 连接到多个 SFTP 站点:“AttributeError: 'Connection' object has no attribute 'CnOpts'”
- xaml - UWP FlyOut 模板在不同系统上的作用不同
- javascript - 条件 $match MongoDB