我正在尝试使用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 {...
您是否尝试过在每个之前使用异步功能?可能是从那里调用setTimeout的。