javascript - JestJs认为没有调用ajax

标签 javascript jquery ajax reactjs jestjs

我在让一个简单的 Jest 测试起作用时遇到了很多麻烦。 Jest 坚持认为我的 Ajax 调用没有发生,并显示错误消息:

FAIL  authTest.js (1.828s)
● Authentication: Logging In › it Doesn't currently have a logged in user
  - Expected Function to be called with { url : 'api/loggedin', type : 'GET', error :       <jasmine.any(function Function() { [native code] })>, success : <jasmine.any(function Function() { [native code] })> }.
    at Spec.<anonymous> (/Users/ritmatter/reps/spec/authTest.js:13:20)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

被测试的代码在一个名为 auth.jsx 的文件中,它看起来像这样:

loggedIn: function() {
  return $.ajax({
    url: 'api/loggedin',
    type: 'GET',
    error: function(xhr, status, err) {
      return false;
    }.bind(this),
    success: function(data) {
      return true;
    }.bind(this),
  });
},

测试看起来像这样:

/** @jsx React.DOM */
"use strict";
var React = require('react/addons');
var TestUtils = React.addons.TestUtils;

describe('Authentication: Logging In', function() {
  it('Doesn\'t currently have a logged in user', function () {
    var $ = require('jquery');
    jest.dontMock('../js/auth.jsx');
    var auth = require('../js/auth.jsx');
    auth.loggedIn();
    expect($.ajax).toBeCalledWith({
      url: 'api/loggedin',
      type: 'GET',
      error: jasmine.any(Function),
      success: jasmine.any(Function)
    });
  });
});

知道为什么 jest 会认为这没有被调用吗?我一直在四处寻找,似乎有一些关于 dontMock() 和 mock() 的错误。

最佳答案

正如 Wagner 提到的,您需要在测试之外全局要求 jquery。您的组件正在使用 $ 的全局版本,因此添加 var $ = require('jquery') 不会将 jquery 添加到全局变量 $。

您也没有模拟 ajax 调用。

在测试 React 时,我通过简单地重新定义 $: 来避免加载 jquery 的问题

window.$ = {ajax: jest.genMockFunction()}

因此,只要除了 ajax 调用之外不需要 jquery,这一行将模拟 jquery 根并模拟 ajax 调用。

关于javascript - JestJs认为没有调用ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26227225/

相关文章:

javascript - 通过 AJAX 和 javascript 抓取屏幕

php - 如何对ajax加载的数据进行分页?

javascript - 有人可以解释为什么 reduce 函数安慰了以下数字

javascript - 如何使用 jQuery 和 CSS 制作老虎机效果

javascript - C# - 获取 Ajax 数据

javascript - 从 javascript 发送 DataTables 中的 JSON 对象

javascript - 如何从异步调用返回响应?

javascript - 使用 URL 中的 # 访问选项卡面板中的不同选项卡 - ExtJS

javascript - 分机JS : Add button to a column in a grid to show/hide other columns

javascript - 突出显示构建谷歌地图 v3