使用sinon.fakeServer获取夹具数据

时间:2012-05-31 13:14:54

标签: javascript testing backbone.js jasmine sinon

我正在尝试使用sinon.fakeServersinon.useFakeXMLHttpRequest和require.js来模拟Backbone.Model.fetch请求。

这是我的代码无法正常工作(1)

我的问题是:
如何使用sinon.fakeServer获取夹具数据?
请在这段代码的最后两条评论。

P.S .:
如果我将获取请求注释到关于sinon.fakeServer的代码,它会向服务器发出get请求 如果我使用sinon.fakeServer发出get请求,它不会获取任何内容(服务器和fixture)


(1)

define([
    'js/models/myModel',
    'js/spec/fixtures/myModel.fixture'
], function (MyModel) {

            beforeEach(function () {

        this.myModel = new MyModel();

                console.log("fixtures", this.fixtures.Task, this);
                this.fixture = this.fixtures.Task.valid;
                this.fixtureTask = this.fixture.response;
                this.server = sinon.fakeServer.create();
                this.server.respondWith(
                    "GET",
                    Routing.generate("api_get_tasks"),
                    JSON.stringify(this.fixture)
                );
            });

            afterEach(function () {
                this.server.restore();
            });


            it("should make the correct request", function() {
                this.server.respond();

                this.feeds.fetch();

            console.log(this.fixture); // this response is OK
            console.log(this.myModel.attributes); // it does not take the value from this.fixture

            console.log("fixtures", this.fixtures.Task, this); // see the picture below

             });

});

enter image description here

1 个答案:

答案 0 :(得分:1)

您不要在模型上调用fetch方法。

试试这个:

 it("should make the correct request", function() {
        this.myModel.fetch();
        this.server.respond();
        console.log(this.fixture); // this response is OK
        console.log(this.myModel.attributes); // it does not take the value from this.fixture

        console.log("fixtures", this.fixtures.Task, this); // fixtures  Object  jasmine.Spec

 });