nightwatch.js 测试中的模拟后端

Mock backend in nightwatch.js tests

在我的 Vue.js 应用程序中,我使用 nightwatch 来测试我的应用程序。我有以下规格:

module.exports = {
  'wrong email or password': function (browser) {
    const devServer = browser.globals.devServerURL
    var nock = require('nock');

    var couchdb = nock('http://localhost:3000/')
                    .get('api/v1/login')
                    .reply(401, {
                      error: 'dupa'
                     });

    browser
      .url(devServer + '/login')
      .setValue('input[type=email]', 'email@example.com')
      .setValue('input[type=password]', 'password')
      .click('.login')
      .assert.containsText('#app', 'Niepoprawny email lub hasło.')
      .end()
  }
}

在我的测试中,我尝试使用 https://github.com/node-nock/nock。但不幸的是,这并没有嘲笑任何请求。我做错了什么?

Nock 取代了它所在的浏览器环境中的 HTTP 机制 运行。 由于您在测试中 运行ning 它,而不是在浏览器中 运行ning,因此浏览器环境没有改变。

您可以做几件事,但这取决于您要实现的目标:

  1. 您可以编写一个假服务器并让它在端口 3000 上侦听并以您喜欢的任何方式回答。
  2. 您可以根据配置将您的应用程序配置为使用不同的机制,并让它在测试中加载 Nock 'strategy'。
  3. 如果您有其他测试检查 UI,您可以将此测试替换为执行实际请求的函数的单元测试和集成测试。

要写一个假的,你只需要一个简单的服务器,returns 你想要的答案。这是 express.js:

的示例
const express = require('express')
const app = express()

app.get('/api/v1/login', function (req, res) {
  res.send('Some response')
})

app.listen(3000, function () {
  console.log('server listening on port 3000')
})