Nightwatch 模拟 HTTP 请求
Nightwatch Mock HTTP Requests
我尝试使用 nock 和其他库(如 sinonjs)模拟 HTTP 请求,但没有成功。
import nock from "nock"
const URL = "http://localhost:8080/"
const SIGN_IN_PATH = "/fake/users/sign_in.json"
export const signInRequest = (status, payload = {}) => {
return nock(URL).get(SIGN_IN_PATH).reply(status, payload)
}
-
import { signInRequest } from "./../../utils/fakeRequests"
const doLogin = (browser) => {
return browser
.url("http://localhost:8080")
.waitForElementVisible('form', 1000)
.setValue('input[name=email]', 'foo@foo.com')
.setValue('input[name=password]', 'somepass')
.click('button[type=submit]')
.pause(500)
}
export default {
"Do login and shows error message": (browser) => {
signInRequest(403)
doLogin(browser)
.waitForElementVisible('.error', 1000)
.end()
}
}
是否可以使用 nightwatch 模拟 http 请求?
Nightwatch.js
是一个端到端的测试工具——所以重点是实际的 UIs 以及他们调用的 api 将是实时的(而不是模拟的)
因此,也许您正在寻找专为集成测试设计的框架,例如 casper.js
(http://casperjs.org/) or nightmare
(https://github.com/segmentio/nightmare)
但是我相信 nightwatch
中的模拟 http 调用应该可以用 nock
来实现(如果你有一些奇怪的用例可以保证它)
确保你在测试之前调用 http 调用(它们甚至可以在 before
块中),例如:
module.exports = {
'test abc' : function (browser) {
nock('http://example.com')
.get('/users')
.query({name: 'martin'})
.reply(200, {results: [{id: '123'}]});
// do test stuff
},
};
您的示例可能存在的问题是您模拟整个 UI - nightwatch
可能会以某种方式阻止同一域被拦截。将 UI 和 API 放在不同的域(或端口)上可能会解决问题
我尝试使用 nock 和其他库(如 sinonjs)模拟 HTTP 请求,但没有成功。
import nock from "nock"
const URL = "http://localhost:8080/"
const SIGN_IN_PATH = "/fake/users/sign_in.json"
export const signInRequest = (status, payload = {}) => {
return nock(URL).get(SIGN_IN_PATH).reply(status, payload)
}
-
import { signInRequest } from "./../../utils/fakeRequests"
const doLogin = (browser) => {
return browser
.url("http://localhost:8080")
.waitForElementVisible('form', 1000)
.setValue('input[name=email]', 'foo@foo.com')
.setValue('input[name=password]', 'somepass')
.click('button[type=submit]')
.pause(500)
}
export default {
"Do login and shows error message": (browser) => {
signInRequest(403)
doLogin(browser)
.waitForElementVisible('.error', 1000)
.end()
}
}
是否可以使用 nightwatch 模拟 http 请求?
Nightwatch.js
是一个端到端的测试工具——所以重点是实际的 UIs 以及他们调用的 api 将是实时的(而不是模拟的)
因此,也许您正在寻找专为集成测试设计的框架,例如 casper.js
(http://casperjs.org/) or nightmare
(https://github.com/segmentio/nightmare)
但是我相信 nightwatch
中的模拟 http 调用应该可以用 nock
来实现(如果你有一些奇怪的用例可以保证它)
确保你在测试之前调用 http 调用(它们甚至可以在 before
块中),例如:
module.exports = {
'test abc' : function (browser) {
nock('http://example.com')
.get('/users')
.query({name: 'martin'})
.reply(200, {results: [{id: '123'}]});
// do test stuff
},
};
您的示例可能存在的问题是您模拟整个 UI - nightwatch
可能会以某种方式阻止同一域被拦截。将 UI 和 API 放在不同的域(或端口)上可能会解决问题