AJAX调用的Sinon超时

Sinon timeouts on AJAX call

本文关键字:超时 Sinon 调用 AJAX      更新时间:2023-09-26

使用Mocha Chai和Sinon,我有一个测试,从一个揭示模块模式中获得一个特定的记录。测试超时失败。我应该如何测试从AJAX请求分配变量的方法?

. js

(function () {
  'use strict';
  describe('Employee Module', function() {
    var server,
        employeeJSON = {
          "employeeTemplate" : [
            {
              "userId": 1
            }
          ]
        };
    before(function () {
      server = sinon.fakeServer.create();
      server.respondWith(
        "GET",
        "/employees.json",
        [200, { "Content-Type": "application/json" }, JSON.stringify(employeeJSON)]
      );
    });
    after(function () {
      server.restore();
    });
    it('should get Employee by ID', function(done) {
      var employee = new Employee(),
          employeeData;
      employee.getData(1).done( function (data) {
        employeeData = data.employeeTemplate[0];
        assert.equal(employeeData.userId, 1, 'Employee ID equals 1');
        done();
      });
    });
  });
})();

Employee.js

var Employee = function() {
  var EmployeeInfo = {};
  var loadUserinfo = function(userid) {
    return $.ajax({
      type: 'GET',
      data:{userid: userid},
      url: '/employees.json',
      dataType: 'json',
      async: true,
      success: function(data) {
        return data;
      }
    });
  };
  var getData = function (userid) {
    return loadUserinfo(userid).done();
  };
  return {
    getData: getData
  };
};

您需要告诉FakeServer何时响应。参考FakeServer API文档

例如:

it('should get Employee by ID', function(done) {
  var employee = new Employee(),
      employeeData;
  employee.getData(1).done( function (data) {
    employeeData = data.employeeTemplate[0];
    assert.equal(employeeData.userId, 1, 'Employee ID equals 1');
    done();
  });
  server.respond(); // Please respond mr. sinon so my test may continue
});