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,因此浏览器环境没有改变。
您可以做几件事,但这取决于您要实现的目标:
- 您可以编写一个假服务器并让它在端口 3000 上侦听并以您喜欢的任何方式回答。
- 您可以根据配置将您的应用程序配置为使用不同的机制,并让它在测试中加载 Nock 'strategy'。
- 如果您有其他测试检查 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')
})
在我的 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,因此浏览器环境没有改变。
您可以做几件事,但这取决于您要实现的目标:
- 您可以编写一个假服务器并让它在端口 3000 上侦听并以您喜欢的任何方式回答。
- 您可以根据配置将您的应用程序配置为使用不同的机制,并让它在测试中加载 Nock 'strategy'。
- 如果您有其他测试检查 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')
})