【问题标题】:Qunit + Sinon to test Backbone's model eventsQunit + Sinon 测试 Backbone 的模型事件
【发布时间】:2012-08-19 22:50:45
【问题描述】:

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

基本上,如果我尝试保存具有无效属性的模型并且我想检查这是否在 Backbone 中触发了正确的“错误”状态,我的服务器 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");

        }});

    });

问题是保存函数的错误回调覆盖了模型中的错误回调,因此触发它的唯一方法是手动执行:

user.trigger("error");

我认为这不是正确的测试方法,因为在我的生产环境中,模型的保存功能没有错误回调,但另一方面我不知道如何告诉 Qunit 等待 ajax 响应评估测试断言。

有人可以建议我一种使它工作的方法吗?谢谢!

【问题讨论】:

    标签: backbone.js qunit sinon


    【解决方案1】:

    这样的事情应该可以解决问题。我这里是凭记忆说的,但是 sinon 假服务器应该允许您立即返回 500 错误状态并随后调用 spyed-on 函数。您可能需要调整 server.respondWith(...) 调用。

    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();
    
            });
    

    【讨论】:

    • 感谢您的回答,它让我朝着正确的方向前进!不需要手动触发错误回调,我只需要使用裸保存函数user.save();,服务器响应代码500就足以触发错误状态。
    猜你喜欢
    • 2012-06-07
    • 2012-04-25
    • 1970-01-01
    • 2012-06-29
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    相关资源
    最近更新 更多