首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为jest模拟松弛的web api

如何为jest模拟松弛的web api
EN

Stack Overflow用户
提问于 2021-05-19 22:01:08
回答 1查看 147关注 0票数 0

我有一个通过命名的导入WebClient使用@slack/web-api包的应用程序。

我想测试一个控制器,它使用了一个模型,而这个模型又使用了slack api。

如下所示:

代码语言:javascript
复制
// model.ts
import { WebClient } from '@slack/web-api';

export default (token) => {
  const slackWebClient = new WebClient(token);
  return {
    func: () => slackWebClient.chat.postMessage(...)
  }
}

// controller.ts
import model from './model'

export const controller = async () => {
  const m = model(token)
  await model.func()
} 

至于我的测试,我试图模拟包,然后测试chat.postMessage函数的行为,但我仍然收到0个调用,尽管当在它旁边添加一个console.log时,我得到了一个输出。

这是我的测试:

代码语言:javascript
复制
import { controller } from '../controller';

const mSlack = {
  chat: {
    postMessage: jest.fn(),
  },
};

jest.mock('@slack/web-api', () => {
  return { WebClient: () => mSlack };
});

it('test controller', async () => {
  await controller()

  expect(mSlack.chat.postMessage).toHaveBeenCalledTimes(1);
})

这是我的代码的简化版本,因为我的代码会非常大,并且我已经测试了所有其他方面,并且我得到了所需的响应。我的问题不是测试本身,而是mock,因为测试的代码是可访问的,但我在如何断言它方面缺少一些东西。

我还将typescript与nodejs一起用于这个应用程序。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-05-19 22:45:06

问题是您正在测试controller.ts,但是@slack/web-api是从model.ts导入的。然而,即使控制器导入了模型,jest也不会模仿它。您只能模拟直接导入到controller.ts中的库(在本例中)。

我的建议是模拟model.ts本身,而不是它的依赖项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67604761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档