Backbone.js Qunit&x2B;Sinon将测试主干网';s模型事件

Backbone.js Qunit&x2B;Sinon将测试主干网';s模型事件,backbone.js,qunit,sinon,Backbone.js,Qunit,Sinon,这些天来,我正试图为我的第一个严肃的主干应用程序进行一些测试。到目前为止,我对普通测试没有任何问题,但现在我一直在尝试设置异步测试 基本上,如果我试图保存一个具有无效属性的模型,并且我想检查这是否触发主干中正确的“错误”状态,那么我的服务器API将返回一个带有500 HTTP代码错误的页面 我尝试以这种方式设置测试: asyncTest("Test save Model function", function(){ expect(1); var user = n

这些天来,我正试图为我的第一个严肃的主干应用程序进行一些测试。到目前为止,我对普通测试没有任何问题,但现在我一直在尝试设置异步测试

基本上,如果我试图保存一个具有无效属性的模型,并且我想检查这是否触发主干中正确的“错误”状态,那么我的服务器API将返回一个带有500 HTTP代码错误的页面

我尝试以这种方式设置测试:

asyncTest("Test save Model function", function(){
        expect(1);

        var user = new User({});

        var err_spy = this.spy();
        user.on('error',err_spy);         

        user.save(user,{error:function(){
            start();
            equal( err_spy.callCount, 1, "Callback 'error' called once");

        }});

    });
问题是save函数的错误回调会覆盖模型中的错误回调,因此触发它的唯一方法是手动执行:

user.trigger("error");
我认为这不是一种正确的测试方法,因为在我的生产环境中,模型的save函数没有错误回调,但另一方面,我不知道如何告诉Qunit等待ajax响应来评估测试断言


有人能给我一个办法让它工作吗?谢谢大家!

像这样的事情应该可以奏效。我从这里的内存开始,但是sinon fake服务器应该允许您立即返回500错误状态,然后调用spied on函数。您可能需要调整server.respondWith(…)调用


像这样的东西应该能奏效。我从这里的内存开始,但是sinon fake服务器应该允许您立即返回500错误状态,然后调用spied on函数。您可能需要调整server.respondWith(…)调用


谢谢你的回答,这让我找到了正确的方向!没有必要手动触发错误回调,我所要做的就是使用裸保存函数
user.save()和服务器响应代码500足以触发错误状态。谢谢你的回答,这让我找到了正确的方向!没有必要手动触发错误回调,我所要做的就是使用裸保存函数
user.save()和代码为500的服务器响应足以触发错误状态。
asyncTest("Test save Model function", function(){
            expect(1);

            var user = new User({});

            // Set up a fake 500 response.
            var server = sinon.fakeServer.create();
            server.respondWith(500, {}, "");

            // Create the error callback.
            var err_callback = function(){};

            var err_spy = sinon.spy(err_callback);         

            user.save(user, {error: err_callback});

            server.respond();

            equal( err_spy.callCount, 1, "Callback 'error' called once");

            server.restore();

        });