繁体   English   中英

无法使用 typescript 开玩笑地模拟 fs - 类型上不存在属性“mockReturnValue”

Cannot mock fs with jest using typescript - Property 'mockReturnValue' does not exist on type

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

问题:

有人能帮我弄清楚如何使用 typescript 开玩笑地模拟 fs 吗? 我已经尝试了一些东西,这是主要的:

我正在尝试使用 jest 来模拟“fs”,但我似乎无法开玩笑地自动模拟 Typescript 中的“fs”库。

这是我的代码:

import fs from 'fs';

jest.mock('fs');

describe('helloWorld.ts', () => {
  it('foobar', () => {

    fs.readdirSync.mockReturnValue(['foo.js', 'bar.js']);
  })
});

Typescript 告诉我“类型上不存在属性'mockReturnValue'......”

不能用玩笑来模拟 fs

环境:

节点 v14.15.1
Typescript:“^4.0.3”
VS 代码 Typescript:4.1.2

在相关的说明中,我用 spyOn 尝试了这个,但失败了:

我尝试使用它,但也无法让spyOn工作(参考: jest typescript property mock does not exist on type

import fs from 'fs';

describe('helloWorld.ts', () => {
  it('foobar', () => {
    jest.spyOn(fs, 'readdirSync').mockImplementation(() => {
      return ['foo.js', 'bar.js'];
    });
    console.log(fs.readdirSync('.'));
  });
});

此代码失败,出现此 typescript 错误 TS2345:

Argument of type '() => string[]' is not assignable to parameter of type '(path: PathLike, options: BaseEncodingOptions & { withFileTypes: true; }) => Dirent[]'.
      Type 'string[]' is not assignable to type 'Dirent[]'.
        Type 'string' is not assignable to type 'Dirent'.

相关参考:

1 个回复

TypeScript 编译器对fs是一个模拟一无所知。

您可以通过使用类型断言来告诉它:

(<jest.Mock>fs.readdirSync).mockReturnValue(...);

每次使用从fs模块导入的模拟函数时,都变得乏味。 为了使事情更简单,您可以声明一个类型为模块模拟的变量,用fs初始化它并在测试中使用它而不是fs

import fs from 'fs';

jest.mock('fs');

const mockFS: jest.Mocked<typeof fs> = <jest.Mocked<typeof fs>>fs;

describe('helloWorld.ts', () => {
  it('foobar', () => {

    mockFS.readdirSync.mockReturnValue(['foo.js', 'bar.js']);
  });
});
1 开玩笑地模拟“fs”模块

我正在尝试像这样模拟fs模块: jest.mock('fs'); 正如在这篇文章中看到的 - 用玩笑模拟 fs function 我应该能够将模块内的函数视为jest.fn()并使用 - fs.existsSync.mockReturnValue(false); 例如。 然而,这似乎不起作用,typ ...

3 开玩笑 mocking 谷歌云/存储 typescript

我一直在尝试为我的实现模拟@google-cloud/storage,这样我就可以测试它而不必在gcp中点击云存储,到目前为止一切都是徒劳的,我试图模拟node_module scope文件夹使用开玩笑的文档并没有解决因此我尝试在下面使用这是我的实现 class 这是我的笑话 我试图包含模拟内联 ...

10 类型“HTMLElement”上不存在打字稿属性“样式”

尽管我的代码有效(如下),但打字稿会抛出错误,提示“类型 'HTMLElement' 上不存在属性 'style'。” 如您所见,我正在通过 jQuery 和元素的 ID 获取元素。 但这会导致以下错误: 我不确定处理这个 ts 错误的正确方法是什么。 有人会告诉我吗? 先感谢您。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM