简单的Jasmine异步测试会导致超时

时间:2015-01-02 21:21:18

标签: javascript testing asynchronous jasmine

我很难在模块中的异步函数上运行一个简单的测试。我试图让我的头脑测试,所以建立了一个工作模块并在repl.it中手动测试它

http://repl.it/7Qf

我的模块看起来像这样:

var weather = (function() {
    var location;
    var url = 'http://api.openweathermap.org/data/2.5/weather?units=metric&q=';

    function getData(loc, callback) {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", url+loc, true);
        xhr.onload = function (e) {
            if (xhr.readyState === 4) {
                if (xhr.status === 200) {
                    callback(JSON.parse(xhr.responseText));
                } else {
                    callback(JSON.parse(xhr.statusText));
                }
            }
        };
        xhr.onerror = function (e) {
            console.error(xhr.statusText);
        };
        xhr.send(null);
    }

    return {
        getTemp: function(location, callback) {
            getData(location, function(data) {
                var temp = data.main.temp.toFixed(2);
                callback(temp);
            });
        }
    }
}());

我的测试套件如下所示:

describe("Weather Module", function() {
    it('get temperature', function(done) {
        weather.getTemp('coventry,uk', function(data){
            console.log(data);
            expect(data).toBe(2.66);
            done();
        });
    });
});

运行此测试时出现超时错误。谁能看到我错在哪里?

编辑:我尝试了不同的方法,但得到了同样的错误。

describe("Weather Module", function() {

    beforeEach(function(done) {
        this.temp = null;
        weather.getTemp('coventry, uk', function(data) {
            this.temp = data;
            done();
        });
    });
    it('should get temp', function() {
        expect(this.temp).toBe(2.66);
    });

});

我仍然收到此错误Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。这是因为Jasmine的默认间隔设置为5000毫秒。

我在测试脚本文件的开头添加了以下行:

jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;// set your time here

这意味着在失败测试之前,Jasmine将等待done()函数20秒。