首页 > 解决方案 > 突然我的测试无缘无故地失败了,但我的 API 正在工作

问题描述

我休息了 1 个小时来玩一些视频游戏,当我回来时,一项测试失败了:“必须连接 MongoClient 才能执行此操作”(操作是 insertOne)。问题是,我有多个使用 DB 的测试,它们都通过了,但是一个特定的测试不再通过,我最近什至没有编辑这个文件。我正在使用本地主机中的 MongoDB 和内存中的 MongoDB 进行测试。

在进行任何提交/推送之前,我使用 husky 和 ​​lint-staged 来确保我的测试通过。除此之外,我正在做 TDD,所以我一直在测试。我什至恢复到我的项目的旧版本,并且所有版本都有这个特定的测试失败。怎么回事??

最奇怪的部分是:我的 API 工作得很好,我的测试却不行!!

我的测试:

describe('POST /signup', () => {
  let userCollection: Collection

  beforeAll(async () => {
    await MongoHelper.connect(global.__MONGO_URI__)

    userCollection = MongoHelper.getCollection('users')

    app.post('/api/auth/signup', signUpController)
  })

  afterAll(async () => {
    await MongoHelper.disconnect()
  })

  afterEach(async () => {
    await userCollection.deleteMany({})
  })

  const agent = request.agent(app)

  it('Should return 200 if all validations succeds', async () => {
    await agent.post('/api/auth/signup').send(makeFakeSignUpUserCredentials()).expect(200)
  })
})

MongoHelper:

export const MongoHelper = {
  client: MongoClient,
  async connect (url: string): Promise<void> {
    this.client = await MongoClient.connect(url)
  },

  async disconnect (): Promise<void> {
    await this.client.close()
  },

  getCollection (name: Collections): Collection {
    return this.client.db().collection(name)
  }
}

我的 API 正在工作: 在此处输入图像描述

但我的测试不起作用: 在此处输入图像描述

标签: node.jstypescriptmongodbtestingjestjs

解决方案


问题解决了……我会把这篇文章留在这里,因为这是一个有趣的故事,哈哈。我恢复到一个在注册时没有发送电子邮件的旧版本并且它有效。这让我相信邮件服务有问题,而不是 MongoDB,正如错误所暗示的那样(不知道为什么它一直说这是一个 mongodb 错误)。

发生的事情是:当我处于开发人员模式时,电子邮件通过 mailtrap 发送,而当我不在时,它通过 sendgrid 发送。当我测试某些东西时,我进入了测试模式,这不是开发者模式,所以它使用了 sendgrid。Sendgrid 每天限制 100 封电子邮件(免费用户),我达到了他们的限制。这就是我收到错误的原因,但不知何故开玩笑说这是一个 mongodb 连接错误。


推荐阅读