gpt4 book ai didi

typescript - 单元测试返回或使用 promise 的 ionic 函数 - TS2304 : Cannot find name 'done' - Jasmine/Karma for unit testing ionic apps

转载 作者:行者123 更新时间:2023-12-03 09:00:46 29 4
gpt4 key购买 nike

我正在尝试使用模拟存储对一个简单的数据访问函数进行单元测试,该存储仅使用内存中的字典。

当我尝试使用 done() 函数时,出现错误:TS2304: Cannot find name 'done' 尽管 jasmine 和 karma 似乎已正确安装。

我所做的事情尚未解决此问题:

  1. 经过验证的 Jasmine 位于packages.json
  2. 添加了 **/*.spec.ts 以排除 tsconfig.json 部分?
  3. 将 tsconfig.json 中的目标从“e5”更改为“e6”

数据.ts:

export class DataProvider {
private foo;
public readonly fooKey
public getFoo() { return this.foo; }
public setFoo(bar: number) {
this.foo = bar;
this.storage.ready().then(() => {
this.storage.set(this.fooKey, JSON.stringify(this.foo));
});
}
}

数据.spec.ts:

include StorageMock;
include DataProvider;

it('should have correct values after loading data',
function() {
comp.storage.set(comp.fooKey, JSON.stringify(0.1234));
comp.storage.get(comp.fooKey).then(result => {
expect(JSON.parse(result)).toEqual(0.1234);
done(); // Error - TS2304: Cannot find name 'done'
});
});

存储模拟:

export class StorageMock {
private internal = [];

public driver(): any {
return '';
}

public ready(): Promise<any> {
return new Promise(function(resolve: Function): void {
resolve({});
});
}

public get(key: string): Promise<any> {
let getval = this.internal[key];
return new Promise(function(resolve: Function): void {
resolve(getval);
});
}

public set(key: string, value: any): Promise<any> {
this.internal.push({key : value});
return new Promise(function(resolve: Function): void {
resolve();
});
}

public remove(key: string): Promise<any> {
let index = this.internal.indexOf(key);
if(index !== -1) {
this.internal.splice(index,1);
}
return new Promise(function(resolve: Function): void {
resolve();
});
}

public clear(): Promise<any> {
this.internal = [];
return new Promise(function(resolve: Function): void {
resolve();
});
}

public length(): Promise<any> {
let length = this.internal.length;
return new Promise(function(resolve: Function): void {
resolve(length);
});
}

public keys(): Promise<any> {
let keys = Object.keys(this.internal);
return new Promise(function(resolve: Function): void {
resolve(keys);
});
}

public forEach(i: any): Promise<any> {
return new Promise(function(resolve: Function): void {
resolve();
});
}

最佳答案

实际答案:

done 不是 Jasmine 框架一部分的函数,而是在测试声明中用作测试完成时的回调。请注意下面的 (done) 声明:

it("should test something async", (done) => {
...do the testing...
done();
}

原答案:

虽然我不确定为什么不能使用 done(),但似乎使用 fakeAsync、flushMicrotasks、tick 可以“完成”工作“(我仍然遇到存储模拟的一些异步问题)。

关于typescript - 单元测试返回或使用 promise 的 ionic 函数 - TS2304 : Cannot find name 'done' - Jasmine/Karma for unit testing ionic apps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50615559/

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