node.js - 突然我的测试无缘无故地失败了,但我的 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)
}
}
解决方案
问题解决了……我会把这篇文章留在这里,因为这是一个有趣的故事,哈哈。我恢复到一个在注册时没有发送电子邮件的旧版本并且它有效。这让我相信邮件服务有问题,而不是 MongoDB,正如错误所暗示的那样(不知道为什么它一直说这是一个 mongodb 错误)。
发生的事情是:当我处于开发人员模式时,电子邮件通过 mailtrap 发送,而当我不在时,它通过 sendgrid 发送。当我测试某些东西时,我进入了测试模式,这不是开发者模式,所以它使用了 sendgrid。Sendgrid 每天限制 100 封电子邮件(免费用户),我达到了他们的限制。这就是我收到错误的原因,但不知何故开玩笑说这是一个 mongodb 连接错误。
推荐阅读
- c# - 将 2 字节值转换为顶点值
- c# - 防止在同一位置连续生成预制件
- vba - 如何在报表代码中引用表单对象
- amazon-web-services - 有没有办法轻松获取特定 AWS Lambda 执行的日志条目?
- python - 如何使用 manim 从非场景类播放动画?
- c++ - C ++:在没有取消引用运算符的情况下访问“数组指针”的值?
- python - 将 bs4 的 get_text() 输出转换为带有标题的 csv
- python - 加入数百个 IRC 频道套接字死亡(抽搐)
- aem - AEM 6.5.3 - WCM IO 问题 - 在上下文感知配置页面上显示标签 ID 而不是标签值
- reactjs - 在可重用组件中呈现不同的 html