测试服务时,如何解决“错误:无法从同步测试中调用setTimeout。”]]

问题描述 投票:0回答:1

我正在尝试使用Jasmine + Karma对使用ngx-socket-io的非常基本的服务进行单元测试。

我不断得到Error: Cannot call setTimeout from within a sync test.

这是我的服务:

import { Injectable } from '@angular/core';
import { Socket } from 'ngx-socket-io';
import { Message } from 'src/app/models/message';

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

  constructor(private socket: Socket) { };

  newMessages(){
    return this.socket.fromEvent<Message>('newMessage');
  }

  newMessage(message: String) {
    this.socket.emit('messageSent', message);
  }
}

这是我的单元测试:

import { TestBed } from '@angular/core/testing';
import { MessageService } from './message.service';
import SocketMock from 'socket.io-mock';
import { WrappedSocket } from 'ngx-socket-io/src/socket-io.service';

describe('MessageService', () => {
  let service: MessageService;
  let socket: WrappedSocket = new WrappedSocket(new SocketMock());
  beforeEach(() => {
    TestBed.configureTestingModule({
      providers :[
        MessageService,
        {provide: WrappedSocket, useValue: socket}
      ]
    });
    service = TestBed.get(MessageService);
  });

  it('should be created', async () => {
    expect(service).toBeTruthy();
  });
});

这里是完整的错误输出:

Error: Cannot call setTimeout from within a sync test.
    at SyncTestZoneSpec.onScheduleTask (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone-testing.js:366:1)
    at ZoneDelegate../node_modules/zone.js/dist/zone.js.ZoneDelegate.scheduleTask (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:404:1)
    at Zone../node_modules/zone.js/dist/zone.js.Zone.scheduleTask (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:238:1)
    at Zone../node_modules/zone.js/dist/zone.js.Zone.scheduleMacroTask (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:261:1)
    at scheduleMacroTaskWithCurrentZone (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:1245:1)
    at http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:2317:1
    at proto.<computed> (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:1569:1)
    at Request.create (http://localhost:9876/_karma_webpack_/webpack:/node_modules/engine.io-client/lib/transports/polling-xhr.js:268:1)
    at new Request (http://localhost:9876/_karma_webpack_/webpack:/node_modules/engine.io-client/lib/transports/polling-xhr.js:165:1)
    at XHR.request (http://localhost:9876/_karma_webpack_/webpack:/node_modules/engine.io-client/lib/transports/polling-xhr.js:92:1)

我只想测试该服务是否已创建。发生了什么事,如何使测试通过?

我正在尝试使用Jasmine + Karma对使用ngx-socket-io的非常基本的服务进行单元测试。我不断收到错误消息:无法从同步测试中调用setTimeout。这是我的服务:import {...

unit-testing jasmine angular7 angular-services
1个回答
0
投票

您是否尝试过在每个之前使用异步功能?可能是从那里调用setTimeout的。

© www.soinside.com 2019 - 2024. All rights reserved.