使用 createSpyObj 对 observable 进行单元测试

物理男孩

我有一个函数调用另一个本身使用 http 订阅的函数,但我在测试它时遇到了麻烦...

我的组件

id = 1;

myFunct() {
  this.myService.delete(this.id);
}

我的服务

delete(id) {
  this.http.delete(this.myUrl + '/' + id).subscribe()
}

测试

let mockService;

beforeEach(() => {
  TestBed.configureTestingModule({
    mockService = createSpyObj(['delete']);

    imports: ...,
    declarations: ...,
    providers: [
      {provide: MyService, useValue: mockService}
    ]
  }).compileComponents();

  fixture = ...;
  component = ...;
  fixture.detectChanges();
});

it('should test delete', () => {
  mockService.delete.and.returnValue({ subscribe: () => {} });
  component.myFunct();
  expect(mockService.delete).toHaveBeenCalledTimes(1);
});

我的测试带回了错误:

无法读取未定义的属性“订阅”

雅库布姆

常见的模式是从您的服务方法返回 observable 并在例如内部订阅。成分。

像这样的东西:

我的组件

 id = 1;

 myFunct() { 
    this.myService.delete(this.id).subscribe( 
     (result) => console.log(result),
     (error) => console.log(error)
 };

我的服务

 delete(id): Observable<any> {
   this.http.delete(this.myUrl + '/' + id)
 }

测试

imports {of} from 'rxjs'

let mockService;

beforeEach(() => {
  TestBed.configureTestingModule({
    mockService = createSpyObj(['delete']);

    imports: ...,
    declarations: ...,
    providers: [
      {provide: MyService, useValue: mockService}
    ]
  }).compileComponents();

  fixture = ...;
  component = ...;
  fixture.detectChanges();
});

it('should test delete', () => {
  mockService.delete.and.returnValue(of({id: 1}));
  component.myFunct();
  expect(mockService.delete).toHaveBeenCalledTimes(1);
});

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用ReSharper进行AngularJS单元测试

来自分类Dev

使用ReSharper进行AngularJS单元测试

来自分类Dev

使用StaticLoggerBinder对类进行单元测试

来自分类Dev

使用RouteAttribute对ApiController进行单元测试

来自分类Dev

使用NSURLSession进行单元测试

来自分类Dev

使用PostSharp进行正确的单元测试

来自分类Dev

使用sinon框架进行单元测试

来自分类Dev

使用Google测试进行单元测试

来自分类Dev

使用Jasmine进行单元测试$ modal

来自分类Dev

使用实体框架进行单元测试的单元测试

来自分类Dev

使用Automake进行单元测试

来自分类Dev

使用MockServletContext进行单元测试

来自分类Dev

对使用RTOS的项目进行单元测试

来自分类Dev

使用Microsoft EntityFramework进行单元测试

来自分类Dev

使用Shim for ZipFile进行单元测试

来自分类Dev

Django使用ForeignKey进行单元测试

来自分类Dev

使用Firebase进行单元测试

来自分类Dev

使用Azure DocumentDB进行单元测试

来自分类Dev

使用打字稿,业力和茉莉花进行单元测试RxJS Observable.timer

来自分类Dev

使用Mockito进行单元测试LazyLogging

来自分类Dev

使用boost :: multiprecision进行单元测试

来自分类Dev

使用Mockito对POJO进行单元测试

来自分类Dev

使用ReSharper进行AngularJS单元测试

来自分类Dev

对使用$ resource的服务进行单元测试

来自分类Dev

使用sinon框架进行单元测试

来自分类Dev

使用Moq进行单元测试

来自分类Dev

使用 MockEndPointsandSkip 进行 Camel 单元测试

来自分类Dev

使用 Moq 框架进行单元测试

来自分类Dev

如何正确使用 createSpyObj