gpt4 book ai didi

javascript - 为什么 Jasmine 不在这个异步测试中执行 it() ?

转载 作者:行者123 更新时间:2023-11-28 01:13:49 26 4
gpt4 key购买 nike

我正在尝试测试一个原型(prototype)方法,该方法返回有关我通过 AJAX 加载的数据集的见解。

$.getJSON('../data/bryce.json').done(function(data) {

insights = new Insights(data);

describe("People Method", function() {

console.log('it executes this far');

it("should return complete people data", function() {

console.log('but not this far');

expect(insights.people()).toBeTruthy();

});

});

});

当我运行这个测试套件时,describe() 会执行,但 it() 不会执行。一般来说,我对 JavaScript 测试还很陌生,所以我想我做错了什么。但我不确定它是什么。

此外,由于我正在处理的数据是一个巨大 JSON 文件,因此实际上不可能将其包含在此文件中。甚至不可能提供样本大小的版本。数据集中的每个对象都有数百行长。

最佳答案

Jasmine 采用排队机制并执行所有 describeit函数对要执行的工作进行排队。

在 Jasmine 中异步工作需要遵循一定的模式。

Jasmine 1.x

describe('some suite', function(){

it('some test', function(){

var data;

//Execute some async operation
runs(function(){
$.get('myurl').done(function(d){ data = d; });
});

//Wait for it to finish
waitsFor(function(){
return typeof data !== 'undefined';
});

//Assert once finished
runs(function(){
expect(data.foo).toBe('bar');
});

});

});

Jasmine 1.x 使用特殊的轮询机制来不断轮询 waitsFor方法直到超时,或者返回true,然后执行最后的runs方法。

Jasmine 2.x

describe('some suite', function(){

var data;

beforeEach(function(done){
$.get('myurl').done(function(d){
data = d;

//Signal test to start
done();
});
});

it('some test', function(done){
expect(data.foo).toBe('bar');

//Signal test is finished
done();
});

});

Jasmine 2.x 有点不同,因为它使用信号机制来指示何时开始和完成测试。您的规范可以采用可选的 done用于同步测试的方法。

如果您使用done beforeEach中的方法那么在调用该方法之前它不会开始您的测试。

如果您使用done方法在你的 it函数,那么在调用该方法之前测试将不会完成。

这两者都可以用来有效管理测试中的异步行为。

关于javascript - 为什么 Jasmine 不在这个异步测试中执行 it() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24088884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com