【发布时间】:2022-02-08 11:19:20
【问题描述】:
我有下面的功能。我无法使用 Jest 框架测试此功能。
功能:
const XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
exports.xhrExample = function() {
var xhr = new XMLHttpRequest();
xhr.open('POST', 'url' , true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
console.log('Some text');
console.log('Some text');
}
};
xhr.send(/*body*/);
}
测试:
/**
* @jest-environment jsdom
*/
const { xhrExample } = require('../function/exampleXHR');
const open = jest.fn();
const setRequestHeader = jest.fn();
const send = jest.fn();
const status = 200;
const readyState = 4;
const xhrMockClass = function () {
return {
open,
setRequestHeader,
send,
status,
readyState
};
};
global.XMLHttpRequest = jest.fn().mockImplementation(xhrMockClass);
test('Should make a request', () => {
xhrExample();
})
特别是我无法覆盖 if 分支。如何编写正确的测试?我见过很多解决方案,但它们不起作用。我也使用了 xhr-mock 实用程序,但它仍然无法正常工作。谢谢大家。
【问题讨论】:
-
你不能模拟 json.parse:stackoverflow.com/questions/53228621/…?
标签: javascript unit-testing jestjs mocking xmlhttprequest