【问题标题】:Sinon js call for PUT or POST methodsSinon js 调用 PUT 或 POST 方法
【发布时间】:2015-06-03 01:39:22
【问题描述】:

我在我的项目中使用 sinon js 进行假服务器调用。它适用于 GET 调用,但我有一个场景,我想用 PUT 或 POST 调用模拟服务器。 我是这样做的:

server = sinon.fakeServer.create(); 
server.respondWith('PUT', /\/administration\/email/,
[204, { "Content-Type": "application/json" }, JSON.stringify(EmailModelFixture)]);

emailView.save("abc@gmail.com");
server.respond();// Responding that save call.

但这不起作用。有人知道怎么解决吗?

【问题讨论】:

标签: javascript unit-testing backbone.js mocking sinon


【解决方案1】:

我已经检查过这个场景,我觉得它没问题,所以效果很好。

这是 Backbone 的示例

test("should submit PUT request", function() {
    var server = sinon.fakeServer.create(); 

    server.respondWith('PUT', /\/administration\/email/,
        [204, { "Content-Type": "application/json" }, JSON.stringify({a:"1"})]);

    var spy_done = sinon.spy();
    var spy_fail = sinon.spy();

    var model = new (Backbone.Model.extend({
        url: "/administration/email/"
    }));

    // Save new model to generate PUT request
    model.save({ id: "test" }, {
        success: spy_done,
        error: spy_fail
    });

    server.respond();

    expect(spy_done.called).to.be.true;
    expect(spy_fail.called).to.be.false;
});

我建议您通过转储 server.requests 来调试您的 ajax 请求,并检查那里的 url 和方法以了解问题所在。

【讨论】:

  • 我必须像这样注册 GET 响应和 PUT 响应:server.respondWith('GET', /\/administration\/email/, [200, { "Content-Type": "application/json" }, JSON.stringify({a:"1"})]); server.respondWith('PUT', /\/administration\/email/, [204, { "Content-Type": "application/json" }, JSON.stringify({a:"1"})]); 如果我注释掉 GET 注册,那么它工作正常。那么我们如何注册两个方法调用呢?
  • 我已经同时检查了两者,并且仍然有效,即使我添加了产生获取请求和服务器响应两次的新模型。您能否更新您的问题以包括您的测试?
猜你喜欢
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多