首页 > 解决方案 > 如何存根 AJAX 请求,其响应取决于传递的数据?

问题描述

我正在尝试用 Jasmine 进行单元测试。我需要模拟对同一个 URL 的两个 AJAX GET 请求,但它们的响应取决于请求中传递的数据。到目前为止,我一直无法找到有关如何使响应依赖于 URL 以外的任何内容的任何信息。

我一直在尝试使用该stubRequest方法:

   jasmine.Ajax.stubRequest('MY_URL.json')
      .andReturn({
        "status": 200,
        "contentType": 'application/json',
        "responseText": rawData
      });

我还应该提到 AJAX 请求是按任意顺序发出的。此外,传递的数据只是一个参数。

标签: javascriptajaxunit-testingjasmineclient-side

解决方案


在线文档非常稀疏,但我找到了方法定义(Jasmine v3.4.0),它回答了我的问题:

this.stubRequest = function(url, data, method) {
  var stub = new $ajax.RequestStub(url, data, method);
  stubTracker.addStub(stub);
  return stub;
};

参数是一个对象,其data键和值是 URL 参数和值。

jasmine.Ajax.stubRequest('MY_URL.json', {param1: "value1"}, "GET")
  .andReturn({
    "status": 200,
    "contentType": 'application/json',
    "responseText": rawData
  });

或者,我想。实际上,虽然这可能适用于 POST,但对于我尝试执行的 GET 请求,事实证明您必须直接将参数添加到 URL。因此,对于 OP 中的请求,

jasmine.Ajax.stubRequest('MY_URL.json?param1=value1')
  .andReturn({
    "status": 200,
    "contentType": 'application/json',
    "responseText": rawData
  });

推荐阅读