Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何模拟在Svelte中导入的Javascript文件进行单元测试?_Javascript_Jestjs_Svelte - Fatal编程技术网

如何模拟在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"

莫名其妙的嘲笑仍然不起作用。尝试了所有的方法,但对我不起作用。我认为这与苗条有关。但是谢谢你的调查。