使用Jest和@std / esm模拟节点模块

时间:2018-02-04 17:01:19

标签: javascript node.js ecmascript-6 jestjs es6-modules

我目前在编写使用@std/esm的节点应用程序的测试时遇到问题。我在__mocks__目录中设置了一个节点模块的手动模拟,下面的代码显示了该文件的测试使用了这个模拟的节点模块。 (它在db.mjs中使用)

const loader = require('@std/esm')(module, { cjs: true, esm: 'js' })
const Db = loader('../src/db').default

const db = new Db()

describe('getNotes', () => {
  it('gets mocked note', () => {
    db.getNote()
  })
})

然而,当我运行Jest时,我的手动模拟没有被使用,它正在使用真实节点模块。

有没有人想过为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

笑话对您的模拟内容的位置很讲究。从他们关于mocking node modules的文档中:

  

例如,要模拟名为@ scope / project-name的作用域模块,   在 mocks / @ scope / project-name.js中创建文件,   @ scope /目录。

您的情况应该是__mocks__/@std/esm.js