gpt4 book ai didi

javascript - Module.exports 用于在路由/ Controller 内进行单元测试

转载 作者:行者123 更新时间:2023-12-03 02:13:21 25 4
gpt4 key购买 nike

我对 NodeJS 和单元测试还很陌生。

我使用 Jest,但它应该与 MochaAvawhatever 具有相同的“问题” >...因为我的问题似乎与 export/import...

我有一个带有一些功能的文件learning.js

// learning.js

function sum(a, b) {
return a + b
}

const multiply = (a, b) => a * b

module.exports = { sum: sum, multiply: multiply }

...和一个 some.test.js 文件:

// some.test.js

const { sum, multiply } = require('./learning')
// const { sum, multiply } = require('./another')

test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3)
})

test('multiplies 2 x 2 to equal 4', () => {
expect(multiply(2, 2)).toBe(4)
})

此时,一切都很完美,我的测试运行并通过。

但是,我有一个名为 another.js 的第三个文件,其结构如下(我使用 express):

router.get('/another', async function(req, res) {

// TESTS
function sum(a, b) {
return a + b
}

const multiply = (a, b) => a * b

// DO SOME OTHER STUFF...

res.status(200).send('ok')
})

module.exports = { sum: sum, multiply: multiply }
//module.exports = router

当我尝试从 some.test.js 运行相同的测试时(仅更改 require 语句以映射到 another.js ),我无法让它发挥作用。我的测试失败:TypeError乘法不是函数

我试图将export移到其他地方,用dot.notation重命名一些内容...我无法使其工作。

有什么线索吗?谢谢!

最佳答案

您遇到了范围问题 - 您的 summultiply 超出了 module.exports 的范围,因为您'从您的路由处理程序中重新定义它们。

为什么不试试这个:

创建一个新文件 helpers.jsservices.js - 无论您如何描述您的功能。

const sum = (a, b) => a + b
const multiply = (a, b) => a * b

module.exports = { sum, multiply }

然后在您的 Express 文件中:

const helpers = require('./helpers.js')

router.get('/another', (req, res) => {
helpers.sum(1,2)
helpers.multiply(3,4)
res.status(200).send('ok')
})

module.exports = router

然后在您的测试问题中,您可以以相同的方式需要 helpers 并单独测试函数。

关于javascript - Module.exports 用于在路由/ Controller 内进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49467724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com