Angular:在单元测试中模拟HttpClient

Xeraphim

我有一项使用httpClient要测试的服务:

@Injectable({
    providedIn: 'root'
})
export class TodolistService {

  constructor(private http: HttpClient) { }

  getTodoLists(): Observable<HttpResponse<TodoList[]>> {
    return this.http.get<TodoList[]>("https://localhost:44305/todolist", { observe: 'response' });
  }
}

我的单元测试设置如下所示:

import { TestBed, getTestBed } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';

import { TodolistService } from './todolist.service';

describe('TodolistService', () => {
  let injector: TestBed;
  let service: TodolistService;
  let httpMock: HttpTestingController;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [ HttpClientTestingModule ],
      providers: [ TodolistService ]
    });

    injector = getTestBed();
    service = injector.get(TodolistService);
    httpMock = injector.get(HttpClientTestingModule);
  });

  afterEach(() => {
    httpMock.verify();
  });

  describe('#getTodoLists', () => {
    it('should return an Observable<TodoList[]>', () => {
      const dummyTodoLists = [ 
        { name: "todoList1", listItems: [{id: 1, description: "listitem1-1", done: false}, {id: 2, description: "listitem1-2", done: false}]},
        { name: "todoList2", listItems: [{id: 2, description: "listitem2-1", done: false}, {id: 4, description: "listitem2-2", done: false}]}
      ];
  
      service.getTodoLists().subscribe(todoLists => {
        expect(todoLists.body.length).toBe(2);
        expect(todoLists.body).toEqual(dummyTodoLists);
      });
  
      const req = httpMock.expectOne("https://localhost:44305/todolist");
      expect(req.request.method).toBe("GET");
      req.flush(dummyTodoLists);
    });
  });
});

不幸的是,测试失败并显示以下消息,但我无法正常工作:

TodolistService> #getTodoLists>应该返回一个Observable <TodoList []>
TypeError:httpMock.expectOne不是一个函数

我究竟做错了什么?

提前致谢

沙申克·维维克

尝试改变HttpClientTestingModule,以HttpTestingControllerbeforeEach

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [ HttpClientTestingModule ],
      providers: [ TodolistService ]
    });

    injector = getTestBed();
    service = injector.get(TodolistService);
    httpMock = injector.get(HttpTestingController); // <-- here
  });

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

在AngularJS单元测试中模拟$ modal

来自分类Dev

在单元测试中模拟HTTP请求

来自分类Dev

单元测试中的部分模拟/错误

来自分类Dev

如何在Angular单元测试中模拟/触发$ routeChangeSuccess?

来自分类Dev

TyphoonPatcher,用于单元测试中的模拟

来自分类Dev

在Angular单元测试中模拟异步Web服务

来自分类Dev

Django单元测试模拟

来自分类Dev

在单元测试中模拟ngModel

来自分类Dev

在单元测试中模拟Spark RDD

来自分类Dev

在单元测试中模拟/存根RuntimeException

来自分类Dev

在单元测试中模拟FTP

来自分类Dev

在单元测试中模拟$ mdSideNav

来自分类Dev

在单元测试中模拟服务

来自分类Dev

在单元测试中模拟IMemoryCache

来自分类Dev

在angular + jest中运行单元测试时,如何正确模拟库“ Twemoji”?

来自分类Dev

在Angular单元测试中,如何模拟整个组件而不是仅模拟类?

来自分类Dev

在单个单元测试中多次模拟httpclient

来自分类Dev

模拟python单元测试中的问题

来自分类Dev

在单元测试中模拟依赖项

来自分类Dev

如何在Angular中模拟父类方法进行单元测试?

来自分类Dev

Angular 9单元测试:如何模拟测试组件的导入?

来自分类Dev

如何在Angular 8中使用对象模拟数组数据以进行单元测试

来自分类Dev

模拟要在Angular单元测试中订阅的模拟服务的Subject属性

来自分类Dev

如何在Angular单元测试中模拟/触发$ routeChangeSuccess?

来自分类Dev

在grails单元测试中模拟表单

来自分类Dev

TyphoonPatcher,用于单元测试中的模拟

来自分类Dev

在单元测试中模拟Angular 1.5组件

来自分类Dev

在单元测试中模拟$ mdSideNav

来自分类Dev

在 Angular 4 单元测试中模拟空闲

Related 相关文章

热门标签

归档