Javascript Nock正在拦截我的请求,但我的AJAX请求出错了
我正在测试使用Javascript Nock正在拦截我的请求,但我的AJAX请求出错了,javascript,ajax,xmlhttprequest,nock,Javascript,Ajax,Xmlhttprequest,Nock,我正在测试使用XMLHttpRequest发出的AJAX请求: export default function requestToTest() { const xhr = new XMLHttpRequest(); xhr.open('GET', 'https://example.com/service'); xhr.onload = () => { console.log('onload'); // etc. }; xhr.onerror = ()
XMLHttpRequest
发出的AJAX请求:
export default function requestToTest() {
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/service');
xhr.onload = () => {
console.log('onload');
// etc.
};
xhr.onerror = () => {
console.log('onerror');
// etc.
};
xhr.send();
}
因此,我使用Nock(和Mocha)设置了一个测试:
当我运行这个测试时,xhr.onerror()
激发,而不是xhr.onload()
。但是,通过观察Nock从调用到的输出,我可以肯定地知道Nock正在拦截我的AJAX请求,并且拦截的请求与Nock的预期URL匹配
为什么在我的测试中调用
xhr.onerror
而不是xhr.onload
。此库是用于发出AJAX请求的XMLHttpRequest
的替代品,并专门设计用于在浏览器环境和Node.js/test环境中或多或少相同地工作
一般来说,使用一个旨在消除浏览器中AJAX请求与从测试环境发出请求之间差异的库似乎是解决此问题的方法。作为一种解决方法,我使用了该库。此库是用于发出AJAX请求的
XMLHttpRequest
的替代品,并专门设计用于在浏览器环境和Node.js/test环境中或多或少相同地工作
一般来说,使用一个旨在消除浏览器中AJAX请求与从测试环境发出请求之间差异的库似乎是解决这个问题的方法。我从来没有完全弄清楚这一点,但我认为这是因为
XMLHttpRequest
仅在浏览器环境中定义,我从来没有完全弄明白这一点,但我认为这是因为XMLHttpRequest
仅在浏览器环境中定义,而不是在Node.js中定义。
describe('requestToTest()', () => {
it('should handle a successful request', () => {
nock('https://example.com')
.log(console.log)
.get('/service')
.reply(200, { some: 'json' });
requestToTest();
expect( /* things I want to check */ ).to.be.true;
});
});