我正在尝试用karma服务器和nock做一些基本的测试。看起来nock根本没有拦截我的请求,有人知道吗?我不知道丢失了什么。我仍然得到真实的数据。
nock('https://api.github.com/users/' + username).log(console.log)
.get('/')
.query(true)
.reply(400, {
statusMessage: 'Bad Request',
foo: 'foo'
})
http.get('https://api.github.com/users/' + username, function(res) {
console.log('res', res)
})
我还添加了这个中间件
const middlewares = [thunk];
const mockStore = configureStore(middlewares);
===== 6月6日更新======
使用react-redux的整个流程下面是我的测试:
import configureStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import axios from 'axios';
import expect from 'expect';
import * as actions from 'actions/test-actions'
import * as types from 'types';
import nock from 'nock'
import { username } from 'constansts'
const middlewares = [thunk];
const mockStore = configureStore(middlewares);
describe('Asynchronous actions', () => {
it('Basic example', done => {
nock('https://api.github.com')
.get('/users/' + username)
.reply(400, {
statusMessage: 'Bad Request',
foo: 'foo'
})
var expectedActions = []
let store = mockStore([], expectedActions, done)
store.dispatch(actions.testRequest())
.then(() => {
console.log('store.getActions() => ', store.getActions())
})
.then(done).catch((err) => {
console.log('ERROR==>', err)
done()
})
})
})
接下来是
export function testRequest () {
return axios.get('https://api.github.com/users/' + username)
.then(function (res) {
console.log('response =>', res.status)
})
.catch(function (err) {
console.log('error =>', err)
})
}
res.status为200,即使我使用nock更改为400
5条答案
按热度按时间li9yvcax1#
这是一个老问题,但我相信答案是,您需要设置
axios
http适配器:当用
jest
运行测试时,你通常在一个“类似浏览器”的环境中运行它们,要让axios使用节点http库,你需要特别告诉它使用http
适配器。https://github.com/axios/axios/tree/master/lib/adapters
wnavrhmk2#
您应该在
get
方法中指定路径:qmb5sa223#
您是在节点环境中还是在Web浏览器(如PhantomJS)中运行测试?
为了使用nock,你必须在node中运行测试(使用Jest或mocha),nock覆盖了node的http行为,因此它只能在node中运行,而不能在浏览器(如PhantomJS)中运行。
要运行测试,您可以:
xkrw2x1b4#
我找到答案了!
显然,它与axios不兼容,我也尝试了“fetch”、“isomorphic-fetch”,但没有成功。
答案是“什么东西
非常感谢,我希望这个职位帮助别人.
exdqitrt5#
我最近发布了一个名为wirepig的nock替代方法,由于它不依赖于覆盖任何节点的stdlib内部,因此它与应用程序使用的任何HTTP库都兼容,包括所有版本的axios。
API非常相似;如果你还在纠结这个问题,那就试试吧!