首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Jest & Typescript来模拟对象中的函数?

如何使用Jest & Typescript来模拟对象中的函数?
EN

Stack Overflow用户
提问于 2022-03-09 07:51:03
回答 1查看 1.4K关注 0票数 2

我有一个函数可以调用url

index.svelte

代码语言:javascript
复制
import {url} from '@roxi/routify';

someFunction(() => {
  let x = $url('/books') // need to mock this call
  console.log('x: ' + x);
});

我怎样才能嘲笑这一行代码呢?

代码语言:javascript
复制
$url("/books")

$前缀

详细信息:

url()是一个声明命名函数subscribe(listener)的对象。

subscribe(listener)调用函数derived(...),该函数返回Readable接口

Readable接口声明了一个不同的subscribe(...)函数

我尝试过的:

#1 mockReturnValuesubscribeurl

代码语言:javascript
复制
import {readable} from "svelte/store";
import {mocked} from "jest-mock";
import {render} from "@testing-library/svelte";
import * as routify from "@roxi/routify";
import books_index from "./index.svelte";

jest.mock("@roxi/routify", jest.fn(() => {
  return {
    __esModule: true,
    url: {
      subscribe: jest.fn().mockReturnValue(readable())
    }
  }
}));

const mockedRoutify = mocked(routify);

it("needs to work", () => {
  const results = render(books_index);
  expect(results);
});

结果:ReferenceError: Cannot access 'store_1' before initialization

#2 mockReturnValuesubscribeurl

代码语言:javascript
复制
jest.mock("@roxi/routify", jest.fn(() => {
  return {
    __esModule: true,
    url: {
      subscribe: jest.fn().mockReturnValue(() => readable())
    }
  }
}));

结果:TypeError: $url is not a function

其他笔记

  • 我试过内测,但后来我得到了routify_1.url.mockReturnValue is not a function
  • 我已经在__esModules: true上试过了&没有它。
  • 我已经尝试过使用哪里imports &模拟声明就是这样做的。
  • 我有另一个测试,我自己的服务工作,所以我相信我的jest.config.tstsconfig.json是正确的。

Ask

我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2022-03-09 10:25:59

我不熟悉斯维特,但我想你应该这样嘲笑

代码语言:javascript
复制
import * as routify from "@roxi/routify";

//you can return whatever you want in this mocked function
jest.spy(routify, 'url').mockReturnValue({
   subscribe: jest.fn()
}) 

你需要记住一件事。这个函数将帮助您覆盖原始函数(在本例中,它是url),这意味着除了subscribe之外,您在url中没有其他属性/函数

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

https://stackoverflow.com/questions/71405970

复制
相关文章

相似问题

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