javascript - 使用 Jest 测试 jquery ajax 调用
问题描述
我的脚本文件中有以下 javascript 代码,我正在使用 JEST 为以下函数编写测试
function getData() {
var $messageBar = $("#message-bar");
var messageBarLength = $messageBar.length;
if (messageBarLength == 0) return;
var apiUrl = $messageBar.attr("data-url");
if (messageBarLength && apiUrl) {
apiUrl = apiUrl.replace("{c}/{l}/{s}/{cs}"
$.get(apiUrl)
.done(function (html) {
if (html) {
$messageBar.html(html);
} else {
$messageBar.hide();
}
})
.fail(function (error) {
$messageBar.hide();
});
}
}
我的笑话测试如下
test("test",
() => {
const jqXHR = {
done: jest.fn().mockImplementation(cb => {
return this;
}),
fail: jest.fn().mockImplementation(cb => {
return this;
})
};
$.get = jest.fn().mockImplementation(() => jqXHR);
$.get();
getData();
expect($.get).toHaveBeenCalled();
});
测试运行良好,但在代码覆盖范围内,它的显示done
和“失败”没有被覆盖。我已经花了一天但没有找到任何解决方案对此的任何帮助将不胜感激。
解决方案
由于你的XHR.done
回调有分支(当它被调用时有html
和没有html
)你将不得不模拟它作为一个调用回调的函数
一次有值
const xhr = { done: jest.fn((cb) => { cb(); return xhr; }), fail: jest.fn((cb) => { cb(); return xhr; }), };
一次没有值
const xhr = { done: jest.fn((cb) => { cb('<span>some HTML</span>'); return xhr; }), fail: jest.fn((cb) => { cb(); return xhr; }), };
这是一个覆盖率 100%的工作示例
推荐阅读
- tensorboard - 多个数据集之间的 Tensorboard 投影仪动画转换
- jupyter - JupyterHub Spawn 第一次安装报错
- c++ - VS2019:如何解决资源视图中的“未知子语言:0x8”消息?
- c# - 如何清除 Cefsharp (Chromium) 代理缓存以更改代理凭据?
- windows - 为什么我的 Anaconda 提示修饰符显示完整的环境路径?
- apache - apache2.service 的作业失败,因为控制进程以错误代码退出。请参阅“systemctl status apache2.service”
- javascript - 用于作为函数参数的可选值组的打字稿
- python - 如何使用python将元素添加到json对象中的特定位置
- c++ - 我可以为随机数生成种子作为函数的静态变量吗?
- python - 如何将只有音频的 mp4 转换为 numpy 数组