【问题标题】:Jasmine, spyOn, getJSON and failJasmine、spyOn、getJSON 和失败
【发布时间】:2015-10-10 22:38:50
【问题描述】:

我正在尝试学习 Jasmine spyOn 功能。当使用 spyOn 测试调用 jQuery.getJSON 的函数时,我得到 TypeError: Cannot read property 'fail'

这是我要测试的功能:

getJsonServerNine: function () {
    'use strict';

    $.getJSON(queryServer.url, function(simpleJson) {
        parseResponse(simpleJson);                
    }).fail(function(error) {
        console.log(error.statusText);
    });

}

这是我的测试:

it("tests getJSON call", function() {
    spyOn($, 'getJSON').and.callFake(function (url, success) {
        success({
            "nine": 9
        });
    });
    queryServer.getJsonServerNine();
    expect(queryServer.queryResult).toBe(9);
});

如果我从 getJsonServerNine() 中删除 fail 回调,那么我的代码就可以工作。如果我调用 jquery.ajax() 而不是 getJSON 那么我可以找到一种方法让它工作。如何通过调用 $.getJSON 使其工作?

我看到this answer 回答了一个类似的问题,它非常好,但与我的情况不太匹配,对我不起作用,并且使用过时的 Jasmine 语法。

【问题讨论】:

    标签: javascript unit-testing jasmine


    【解决方案1】:

    $.getJSON 返回的对象应该有一个 fail() 方法。在您的实现中,它返回未定义。

    fake 函数应该返回一个像这样的对象:

    // Source
    var queryServer = {
        getJsonServerNine: function () {
            'use strict';
    
            $.getJSON(queryServer.url, function (simpleJson) {
                // parseResponse(simpleJson);
                console.log(simpleJson)
                queryServer.queryResult = simpleJson[Object.keys(simpleJson)[0]];
            }).fail(function (error) {
                console.log(error.statusText);
            });
    
        }
    }
    
    // Test
    describe('foo', function () {
        it("tests getJSON call", function () {
            spyOn($, 'getJSON').and.callFake(function (url, success) {
                success({
                    "nine": 9
                });
                return {
                    fail: function() {}
                }
            });
            queryServer.getJsonServerNine();
            expect(queryServer.queryResult).toBe(9);
        });
    });
    

    在这里查看 JS 小提琴 - http://jsfiddle.net/eitanp461/32e17uje/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 2013-08-10
      • 2015-08-22
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多