在nightwatch.js测试中模拟后端

时间:2017-09-12 18:38:21

标签: javascript ecmascript-6 vue.js nightwatch.js

在我的Vue.js应用中,我正在使用夜视测试我的应用。我有以下规范:

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。但不幸的是,这并没有嘲笑任何请求。我做错了什么?

1 个答案:

答案 0 :(得分:3)

Nock替换运行它的浏览器环境中的HTTP机制。 由于您在测试中运行它(未在浏览器中运行),因此浏览器环境保持不变。

你可以做几件事,但这取决于你想要达到的目标:

  1. 你可以写一个假的服务器,让它在3000端口听,然后以你喜欢的方式回答。
  2. 您可以根据配置将应用程序配置为使用不同的机制,并在测试中加载Nock“策略”。
  3. 如果您有其他测试检查UI,您可以将此测试替换为执行实际请求的函数的单元测试和集成测试。
  4. 要写一个假的,你只需要一个简单的服务器来返回你想要的答案。这是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')
    })