如何使用Sinon FakeXMLHttpRequest获取原始XHR请求

时间:2015-11-29 18:50:39

标签: sinon

以下是docs的示例:

{
    setUp: function () {
        this.xhr = sinon.useFakeXMLHttpRequest();
        var requests = this.requests = [];

        this.xhr.onCreate = function (xhr) {
            requests.push(xhr);
        };
    },

    tearDown: function () {
        this.xhr.restore();
    },

    "test should fetch comments from server" : function () {
        var callback = sinon.spy();
        myLib.getCommentsFor("/some/article", callback);
        assertEquals(1, this.requests.length);

        this.requests[0].respond(200, { "Content-Type": "application/json" },
                                 '[{ "id": 12, "comment": "Hey there" }]');
        assert(callback.calledWith([{ id: 12, comment: "Hey there" }]));
    }
}

这很有效,但它不允许我使用xhr.send()调用来检查我的代码实际发送的内容,这对我来说不是很有用。

因为我在节点env中进行单元测试,所以我没有真正的XMLHttpRequest对象,所以像nock这样的东西不起作用。

Sinon似乎可能但我找不到我需要的东西 - 有没有办法看看res.send()调用实际发送的是什么而不是假装?

1 个答案:

答案 0 :(得分:0)

解决。通过检查"test should fetch comments from server" : function () { var callback = sinon.spy(); myLib.getCommentsFor("/some/article", callback); var body = JSON.parse(this.requests[0].requestBody); assert(body.XYX)... } 元素可以使用它。

struct A { };

struct B {
    B(const B&) = delete;
    B(B&&) = default; // how to return B - pt 1 : move constructor
    explicit B(const A&) {}
};

void foo(B) {}

B bar() {
    A a;
    return B(a); // how to return B - pt 2 : explcitly convert it
}

int main() {
    A a;
    foo(B(a)); // how to pass a - explicit conversion
}