我尝试使用nock和其他libs(如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()
}
}
可能使用夜间仪表模拟http请求?
答案 0 :(得分:5)
bool
是一个端到端测试工具 - 所以重点是实际用户界面以及他们调用的API将是实时的(而不是模拟的)
所以,也许您正在寻找专为集成测试而设计的框架,例如Nightwatch.js
(http://casperjs.org/)或casper.js
(https://github.com/segmentio/nightmare)
然而nightmare
中nightwatch
的模拟http调用应该与nock
相关(我相信)(如果你有一些奇怪的用例需要保证)
确保你在测试之前进行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可能会解决问题