为与mysql数据库交互的node.js程序编写功能测试的最佳策略

时间:2017-12-22 03:30:58

标签: node.js docker mocha functional-testing

我有一个node.js程序,它与mysql服务器有交互。现在我将使用mocha编写功能测试。

我进行功能测试的方式如下:

  1. 使用mysql docker container创建dockerode
  2. 让node.js程序连接到mysql服务器docker容器并向其写入数据。
  3. 检查数据库是否包含预期数据。
  4. 删除docker容器。
  5. 我对上述策略的问题是:

    1. 如何让node.js等待mysql容器为连接做好准备?目前,我使用setTimeout等待几秒钟。我认为这不合适。因为不同的机器可能需要不同的秒数才能使容器准备好连接。

    2. 是否可以创建一个假的mysql服务器而不是使用docker容器来创建一个真正的mysql服务器?我还没有发现任何模仿mysql服务器行为的节点模块。因为我认为创建一个假的mysql服务器可以让我准确知道服务器何时准备好连接。

    3. 有没有人有这种经历?

      以下是我的代码的一部分:

      let Docker = require('dockerode')
      let docker = new Docker({socketPath: '/var/run/docker.sock'})
      
      describe('Test AddShop2Database behavior', () => {
        before((done) => {
          setTimeout(setupDatabase, // setupDatabase create a mysql docker container
            1000, (err, data) => {
              if (err) {
                console.error(`setupDatabase error: ${err}`)
              } else {
                console.log(`setupDatabase data: ${data}`)
                done()
              }
            })
        })
        it('should add data to some tables', (done) => {
          done()
        })
        after(() => {
          // remove mysql docker container
          let container = docker.getContainer(ContainerName)
          container.remove({force: true}, (err, data) => {
            if (err) {
              console.error(`container remove error: ${err}`)
            } else {
              console.log(`container remove data: ${data}`)
            }
          })
        })
      })
      

0 个答案:

没有答案