【问题标题】:Asynchronous test with Mocha and Chai GET doesn't work for Node.js Rest API使用 Mocha 和 Chai GET 进行异步测试不适用于 Node.js Rest API
【发布时间】:2021-05-11 03:10:46
【问题描述】:

提前感谢您的阅读!

即使在寻找示例和教程之后,我仍在努力进行测试,我的测试无法正常工作,但我不确定问题是与 Chai 相关还是我的 API 服务器。

所有代码都是开源的,可用here

我有一个端点,应该将所有练习作为列表返回:GET /v1/exercises

这是我的测试:

'use strict'

const chai = require('chai')
const chaiHttp = require('chai-http')
chai.should()

const app = require('../src/app')

chai.use(chaiHttp)
const expect = require('chai').expect

describe('Exercise', () => {
  it('Should get all exercises', (done) => {
    chai
      .request(app)
      .get('/v1/exercises')
      .end((err, res) => {
        const result = res.statusCode
        expect(result).to.equal(200)
        done()
      })
  })
})

我得到这个错误:

错误:超过 2000 毫秒的超时。对于异步测试和钩子,确保调用了“done()”;如果返回 Promise,请确保它已解决。 (/Users/kevintassi/Documents/project/fitigai/api/test/01.exercise.spec.js)

您可以在此处查看文件:

你知道为什么会出现这个问题吗? 请注意,我没有这个错误是端点错误,所以我猜只有在函数正在处理时才会出现超时。 但还是不明白为什么。

非常感谢您抽出宝贵时间。如果需要,请随时向我询问更多详细信息。

【问题讨论】:

  • 您的 API 可能需要超过 2 秒才能响应,这就是它失败的原因。使用这个参数--timeout 10000将超时时间增加到10 seconds,看看它是否有效。
  • 嗨,Shaharyer,感谢您的回答。实际上它也不起作用。添加了 20s 所以测试但同样的问题。除了测试之外,即使是 api 的响应也很糟糕。 > 错误:超过 20000 毫秒的超时。对于异步测试和钩子,确保调用了“done()”;如果返回 Promise,请确保它已解决。 (/Users/kevintassi/Documents/project/fitigai/api/test/01.exercise.spec.js)
  • chai.request(app) 可能没有启动您的服务器并且请求不成功。由于您没有处理err,因此您不知道发生了什么。单独启动服务器并提供chai的确切URL。
  • 您可以尝试在您的expect 之前添加一个简单的console.log(result) 语句,以确保响应确实及时返回。我相信可能不会。

标签: javascript node.js testing mocha.js chai


【解决方案1】:

问题与 Chai 或 Mocha 无关。

这就是我的应用程序和服务器的配置方式。只需将数据库连接移动到应用程序而不是服务器即可解决问题,因为 mocha 会自动监听应用程序,它知道包含数据库连接。

这导致了超时问题。

感谢@Shaharyar 的帮助(在评论中)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 2017-06-20
    • 2018-02-27
    • 2020-02-28
    • 2017-02-18
    • 2021-09-27
    • 1970-01-01
    相关资源
    最近更新 更多