Jest.js 尝试使用导出的Svelte组件函数时,类型“typeof SvelteComponentDev”上不存在属性“updateEnabledSubmitSignup”

lx0bsm1f  于 2023-02-17  发布在  Jest
关注(0)|答案(1)|浏览(169)

我想从一个Svelte组件中导出一个函数,并将其导入到一个Jest测试文件中进行测试。
基于this post的预期结果是:

// index.svelte
<script>
  export function updateEnabledSubmitSignup(email, username, password, confirmedPassword) {
      // ...
  }
</script>

然后在我的测试文件中

import Signup from "../src/routes/signup/index.svelte"

describe("signup page logic", () => {
  test("ensure that the signup form button enablement conditions work properly", () => {
    console.log(Signup, "5rm")
    const failureOne = Signup.updateEnabledSubmitSignup()
    expect(failureOne).toBe(false)
  })
})

但是运行这段代码

tests/signup.test.ts:6:31 - error TS2339: Property 'updateEnabledSubmitSignup' does not exist on type 'typeof SvelteComponentDev'.

    6     const failureOne = Signup.updateEnabledSubmitSignup()

如果用Property 'updateEnabledSubmitSignup' does not exist on type 'typeof SvelteComponentDev'.执行<script context="module">,也会失败
如果尝试命名导入,如
import { updateEnabledSubmitSignup } from "../src/routes/signup/index.svelte"
那么运行测试得到error TS2614: Module '"*.svelte"' has no exported member 'updateEnabledSubmitSignup'. Did you mean to use 'import updateEnabledSubmitSignup from "*.svelte"' instead?
有人知道如何做到这一点吗?This reddit post声称“您可以使用组件顶部的标记来导出函数。”但即使我这样做了,导入也失败了。

fbcarpbf

fbcarpbf1#

从正则脚本导出的函数位于示例上,例如

let signup;
onMount(() => signup.updateEnabledSubmitSignup());
<Signup bind:this={signup} />

context=module脚本导出的函数称为文件的导出。
如果您从中得到一个类型错误,那是因为您的工具没有正确地确定类型(它一般说*.svelte,而不是这个特定组件的具体类型)。问题是,为什么您的测试首先要进行类型检查。

相关问题