所以我有下面这个NextJs实用程序文件函数,它返回一个导入的函数。然后,导入的函数接受一个使用上下文的处理程序作为参数。
import { ironSessionUtil } from './anotherUtil'
const checker = () =>
ironSessionUtil(({ req }) => {
const { user } = req.session
if (!user) {
return {
redirect: { destination: '/welcome', permanent: false }
}
}
return { props: { details: user.details } }
})
export default checker
到目前为止,我只尝试调用该方法,但它返回Async Function
。
it('should return props', () => {
const result = checker()
console.log('result >> ', result)
})
这将返回:[AsyncFunction: nextGetServerSidePropsHandlerWrappedWithIronSession]
我一直在网上搜索如何测试这个。你会建议重构以使其更可测试吗?或者你知道这是如何在开玩笑吗?
1条答案
按热度按时间jvlzgdj91#
我假设你通常会问如何测试带有-iron-session的API路由,因为这是我正在做的,我找到了你的问题。我发现了这个resource,它给了我一个可能的解决方案的线索。
我在代码中所做的主要重构是从一个单独的文件中导出实际的API路由函数。我把这个文件保存在我的/lib文件夹中,以防止它进入API路由。
然后,我在实际的API路由中导入了该函数,并在此处使用iron会话进行 Package 。Iron会话不需要测试,但在这里执行集成测试是很重要的。
现在,通过Jest测试,我可以使用像node-mocks-http这样的包来创建我想要响应的会话信息,并测试代码以查看它如何响应。
展望未来,我知道我将设计一种方法来测试集成设置中的api路由,但在身份验证后分离路由对我来说是一个巨大的胜利,因为我现在可以在Jest中自动完成所有这些工作。