我有一个函数可以调用url
index.svelte
import {url} from '@roxi/routify';
someFunction(() => {
let x = $url('/books') // need to mock this call
console.log('x: ' + x);
});我怎样才能嘲笑这一行代码呢?
$url("/books")详细信息:
url()是一个声明命名函数subscribe(listener)的对象。
subscribe(listener)调用函数derived(...),该函数返回Readable接口
Readable接口声明了一个不同的subscribe(...)函数
我尝试过的:
#1 mockReturnValue从subscribe到url
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 mockReturnValue从subscribe到url
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.ts和tsconfig.json是正确的。Ask
我遗漏了什么?
发布于 2022-03-09 10:25:59
我不熟悉斯维特,但我想你应该这样嘲笑
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中没有其他属性/函数
https://stackoverflow.com/questions/71405970
复制相似问题