我很难在模块中的异步函数上运行一个简单的测试。我试图让我的头脑测试,所以建立了一个工作模块并在repl.it中手动测试它
我的模块看起来像这样:
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.
答案 0 :(得分:0)
我遇到了同样的问题。这是因为Jasmine的默认间隔设置为5000毫秒。
我在测试脚本文件的开头添加了以下行:
jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;// set your time here
这意味着在失败测试之前,Jasmine将等待done()函数20秒。