node.js - 我应该如何自动启动我的 nodejs 应用程序进行测试

标签 node.js express automated-tests

我有一个没有前端的 nodejs Restful 风格服务,它只接受数据然后用它做一些事情。

我已经对我想要的大部分方法级内容进行了单元测试,但是现在我基本上想做一些自动化测试来证明它们可以协同工作。当我使用 ASP.MVC 和 IIS 时,它很容易,因为服务器始终处于打开状态,所以我只是设置场景(将虚拟 guff 插入数据库)然后创建一个 HttpRequest 并将其发送到服务器并断言我得到了我期望的结果.

但是在 nodejs 中存在一些挑战,因为应用程序需要通过命令行或其他一些机制运行,所以假设我有一个将开始监听的 app.js,我有什么方法可以自动启动它在我运行测试之前继续,然后在我的测试完成后关闭它?

我目前正在使用 Yadda 和 Mocha 进行测试,因此我可以以 BDD 风格的方式编写它,但是我希望网络应用程序的启动与我正在使用的框架无关。

最佳答案

只需公开一些方法来启动和停止您的网络服务器。您的 app.js 文件可能是这样的:

var app = express()
var server = null
var port = 3000

// configure your app here...

exports.start = function(cb) {
  server = http.createServer(app).listen(port, function () {
    console.log('Express server listening on port ' + port)

    cb && cb()
  })
}

exports.close = function(cb) {
  if (server) server.close(cb)
}

// when app.js is launched directly
if (module.id === require.main.id) {
  exports.start()
}

然后在你的测试中你可以做这样的事情(基于 mocha 的例子):

var app = require('../app')

before(function(done) {
  app.start(done)
})

after(function(done) {
  app.close(done)
})

关于node.js - 我应该如何自动启动我的 nodejs 应用程序进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19740763/

相关文章:

javascript - socket.io 连接返回一个空数组。在不重新加载页面的情况下在 React 中接收数据的方法?

node.js - Node 命令在 Windows 上的 git bash 终端中不起作用

node.js - Req.session 在请求内未定义?

node.js - Mongoose 不插入数据

node.js - 驱动程序可执行文件的路径必须由 web driver.gecko.driver 系统属性设置;夜间值类

javascript - meteor JS : Dynamic Layout Template

Node.js:我应该在错误时丢弃请求吗?

javascript - Node.js 上的异步问题

python - 错误: Message: element click intercepted:

testing - "VerifyTextPresent"为 Selenium IDE 返回不正确的结果