首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为单元测试模拟rxjs6 webSocket函数?

如何为单元测试模拟rxjs6 webSocket函数?
EN

Stack Overflow用户
提问于 2019-03-29 18:33:24
回答 1查看 391关注 0票数 2

我正在尝试对一些使用rxjs6中的webSocket函数的代码进行单元测试。我尝试通过执行以下操作(按照推荐的here)来窥探webSocket函数:

import * as rxJsWebSocket from 'rxjs/webSocket';

代码语言:javascript
复制
subject = new Subject();
webSocketSpy = spyOn(rxJsWebSocket, 'webSocket').and.returnValue(<any>subject);

但我得到了错误:-

Error: <spyOn> : webSocket is not declared writable or has no setter

有没有其他方法来实现这一点,或者是否有解决该错误的方法?

我也尝试过ts-mock-imports,但没有成功。

EN

回答 1

Stack Overflow用户

发布于 2020-09-10 15:24:28

使用"rxjs": "^6.6.3"时,它对我很有效。例如。

index.ts

代码语言:javascript
复制
import { webSocket } from 'rxjs/webSocket';

export function main() {
  return webSocket('ws://localhost:8081');
}

index.test.ts

代码语言:javascript
复制
import { main } from './';
import * as rxJsWebSocket from 'rxjs/webSocket';
import { Subject } from 'rxjs/internal/Subject';

describe('55415481', () => {
  it('should pass', () => {
    const subject = new Subject();
    const webSocketSpy = spyOn(rxJsWebSocket, 'webSocket').and.returnValue(<any>subject);
    const actual = main();
    expect(actual).toBe(<any>subject);
    expect(webSocketSpy).toHaveBeenCalledWith('ws://localhost:8081');
  });
});

单元测试结果:

代码语言:javascript
复制
Executing 1 defined specs...
Running in random order... (seed: 21376)

Test Suites & Specs:
(node:74151) ExperimentalWarning: The fs.promises API is experimental

1. 55415481
   ✔ should pass (8ms)

>> Done!


Summary:

  Passed
Suites:  1 of 1
Specs:   1 of 1
Expects: 2 (0 failures)
Finished in 0.02 seconds

源代码:https://github.com/mrdulin/jasmine-examples/tree/master/src/stackoverflow/55415481

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55415481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档