使用 jest 如何测试在我的 jQuery 应用程序中发出 ajax 请求并模拟其响应的函数?我的应用程序不是在 nodejs 中编译的,而是直接在浏览器中运行的。jest 站点https://github.com/facebook/jest/tree/master/examples/jquery上的示例假定 ajax 函数是一个单独的模块,并且整个应用程序都是用 webpack 之类的东西编译的。这是我的应用程序:
(function(root) {
"use strict";
// if environment is node then import jquery.
var $ = (typeof module === "object" && module.exports) ? require('jquery') : jQuery;
function displayUser() {
var fetchCurrentUser = function (url) {
var xhr = $.get(url);
$.when(xhr)
.done(function(data) {
greet(data);
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.log(errorThrown);
});
};
var greet = function(data) {
$('#greet').text('Hello ' + data.name);
}
fetchCurrentUser('/my/api');
return {
fetchCurrentUser: …Run Code Online (Sandbox Code Playgroud) 我对 ES6 类中使用$.get(). 我能够嘲笑$.get()。我正在测试使用$.get()and的同一个类中的另一个函数$(data, ownerDocument).find(),但我无法弄清楚如何为该函数添加模拟$().find()。
我是如何嘲笑的$.get():
const jQuery = require(path/to/jquery);
jest.mock(path/to/jquery);
describe("Description", () => {
test("Test", () => {
// multiple tests with different mocks of $.get, so clearing
jQuery.get.mockClear();
jQuery.get.mockImplementation((path) => path);
// test function that uses $.get
});
});
Run Code Online (Sandbox Code Playgroud)
根据笑话文档中的这一部分,我尝试使用 2 个参数版本为 jQuery 构造函数添加模拟jest.mock:
// jest.mock(path/to/jquery);
jest.mock(path/to/jquery, () => {
return jest.fn().mockImplementation(arg1, arg2) => {
return {
find: () => console.log('find'); // …Run Code Online (Sandbox Code Playgroud)