如何用jest测试一个小组件的函数?

nwo49xxi  于 2023-08-01  发布在  Jest
关注(0)|答案(2)|浏览(149)

互联网上有很多文档用jest来测试svelte组件,调用render函数和模拟浏览器事件。这很好,但是我如何在一个纤细的组件中测试一个函数呢?

我的组件.苗条

  1. <script>
  2. function veryComplicated(foo) {
  3. ...
  4. }
  5. </script>
  6. <div>...</div>

字符串

我的组件.测试. js

  1. import { veryComplicated } from "./mycomponent.svelte"
  2. test('it works', async () => {
  3. expect(vercomplicated("foo").toBe("bar"))
  4. })


开玩笑的

  1. FAIL src/mycomponent.test.ts
  2. Test suite failed to run
  3. src/mycomponent.test.ts:1:10 - error TS2614: Module '"*.svelte"' has no exported member 'veryComplicated'. Did you mean to use 'import veryComplicated from "*.svelte"' instead?
  4. 1 import { veryComplicated } from "./mycomponent.svelte"
  5. ~~~~~~~~~~~~~~~
  6. Test Suites: 1 failed, 1 total
  7. Tests: 0 total
  8. Snapshots: 0 total
  9. Time: 1.697 s
  10. Ran all test suites.


veryComplicated定义之前添加export没有任何帮助。
如何测试veryComplicated函数?

nhaq1z21

nhaq1z211#

可以使用模块上下文脚本块导出函数。

  1. <script context="module">
  2. export veryComplicated() {
  3. // ...
  4. }
  5. </script>
  6. <div>...</div>

字符串
然后,您可以像最初尝试的那样执行import { veryComplicated } from './mycomponent.svelte'
https://svelte.dev/tutorial/module-exports

bihw5rsg

bihw5rsg2#

找到了我得打给render

我的组件.测试. js

  1. import { render } from '@testing-library/svelte'
  2. import MyComponent from "./mycomponent.svelte"
  3. test('it works', async () => {
  4. const component = render(MyComponent)
  5. expect(component.veryComplicated("foo")).toBe("bar")
  6. })

字符串
并且需要导出原始文件中的veryComplicated函数:

  1. <script>
  2. export function veryComplicated(foo) {
  3. ...
  4. }
  5. </script>

展开查看全部

相关问题