如何模拟在Svelte中导入的Javascript文件进行单元测试?
我有以下苗条的文件 仪表板。苗条如何模拟在Svelte中导入的Javascript文件进行单元测试?,javascript,jestjs,svelte,Javascript,Jestjs,Svelte,我有以下苗条的文件 仪表板。苗条 <script> import Proxy from "../Proxy.js"; import { onMount } from "svelte"; export let data = []; onMount(async () => { spinner = true; let data = await Proxy.getData(); }); </script> ...... ......
<script>
import Proxy from "../Proxy.js";
import { onMount } from "svelte";
export let data = [];
onMount(async () => {
spinner = true;
let data = await Proxy.getData();
});
</script>
......
......
......
现在,我要模拟的并不是Proxy.js,而是始终深入到内部代码中
知道这里出了什么问题吗
谢谢你的帮助。我认为正确的处理方法如下:
import Proxy from "../src/Proxy.js";
import Dashboard from "../src/Dashboard.svelte"
jest.mock("../src/Proxy.js");
describe('Dashboard Component', (next) => {
it('should update data on mount', () => {
Proxy.mockImplementation(() => {
return {
getData: jest.fn().mockResolvedValue([{"id": "sdadasdas"}]);
}
});
const target = document.createElement('div');
const dashboard = new Dashboard({ target });
// I don't know why using setTimeout here, but it's up to you !
setTimeout(() => {
expect(dashboard.data.length).toBe(1);
next();
}, 10);
})
});
import Proxy from "../src/Proxy.js";
import Dashboard from "../src/Dashboard.svelte"
// Do not use automatic mock
describe('Dashboard Component', (next) => {
it('should update data on mount', () => {
Proxy.getData = jest.fn().mockResolvedValue([{"id": "sdadasdas"}]);
const target = document.createElement('div');
const dashboard = new Dashboard({ target });
// rest of the code ...
})
});
另外,如果您需要模拟另一个测试的getData,您可以通过向jest.mock传递第二个参数来模拟它,如下所示:
jest.mock("../src/Proxy.js", () => {
return {
getData: jest.fn().mockResolvedValue([{"id": "sdadasdas"}]);
};
});
我不知道您正在编写的上下文,但我认为另一种模拟getData的方法如下:
import Proxy from "../src/Proxy.js";
import Dashboard from "../src/Dashboard.svelte"
jest.mock("../src/Proxy.js");
describe('Dashboard Component', (next) => {
it('should update data on mount', () => {
Proxy.mockImplementation(() => {
return {
getData: jest.fn().mockResolvedValue([{"id": "sdadasdas"}]);
}
});
const target = document.createElement('div');
const dashboard = new Dashboard({ target });
// I don't know why using setTimeout here, but it's up to you !
setTimeout(() => {
expect(dashboard.data.length).toBe(1);
next();
}, 10);
})
});
import Proxy from "../src/Proxy.js";
import Dashboard from "../src/Dashboard.svelte"
// Do not use automatic mock
describe('Dashboard Component', (next) => {
it('should update data on mount', () => {
Proxy.getData = jest.fn().mockResolvedValue([{"id": "sdadasdas"}]);
const target = document.createElement('div');
const dashboard = new Dashboard({ target });
// rest of the code ...
})
});
在内部使用Proxy.js之前,请尝试模拟它
jest.mock("../src/Proxy.js");
import Dashboard from "../src/Dashboard.svelte"
莫名其妙的嘲笑仍然不起作用。尝试了所有的方法,但对我不起作用。我认为这与苗条有关。但是谢谢你的调查。