【问题标题】:responseJson not present when using sinon.fakeServer使用 sinon.fakeServer 时 responseJson 不存在
【发布时间】:2016-01-11 10:25:56
【问题描述】:

我有在发出 AJAX 请求后接收 XHR 对象的代码:

$.get('/url')
  .then(function(data) {
    var jsonData = data.responseJson;
    var responseText = data.responseText;
    /* ... */
  }).fail(err) {
    /* ... */
  });

当我在我的实时网站上使用它时,responseJsonresponseText 都被定义了。但是当我尝试使用sinon.fakeServer 模拟服务器响应时,没有responseJson 对象:

var server = sinon.fakeServer.create();
server.respondWith("POST", "/url", function(request) {
  request.respond(400, {'Content-Type': 'application/json', JSON.stringify({
    foo: 1,
    bar: 2
  }));
});

/* ... */

// Then in my code
$.get('/url')
  .then(function(data) {
    var jsonData = data.responseJson; //undefined
    var responseText = data.responseText; //defined
    /* ... */
  }).fail(err) {
    /* ... */
  });

如何让 sinon.js 创建正确的 responseJson 对象,以便我可以在代码中使用 responseJson 并且仍然通过测试?

【问题讨论】:

  • 我在尝试测试错误响应时遇到了同样的问题。似乎在任何 400-500 响应代码上,responseText 始终是一个空字符串。

标签: javascript json xmlhttprequest sinon


【解决方案1】:

看起来您正在响应来自假服务器的 400(错误请求)而不是 200(正常)。这是故意的吗?从远程服务器收到错误请求时是否有可用的 responseJson?

如果不是故意的 400:只需将您的 400 更改为 200。

【讨论】:

  • 是的,这是故意的。我正在尝试确保正确的事情发生在错误的错误中,是的,对象在真正的错误请求期间存在。
猜你喜欢
  • 2012-06-05
  • 2019-04-29
  • 2019-12-12
  • 2022-08-02
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多