我有一个方法,它是用d3 timer来调用的.无论何时调用该方法,该方法都会发出一个带有几个值的对象.

所以,为了解决这个问题,在我的测试中,我订阅了事件emits 器,在订阅中,我将接收到的对象推送到一个本地数组中.然后,我希望array[i]array[i+1]小.我认为我的逻辑是完全正确的,但我不确定为什么Jasmine说the spec has no expectations是错误的,尽管我有一个.

以下是代码:

let x = d3.timer((elapsed) => { 
    this.method(); // call the function
    if(elapsed >= 500) {
     x.stop(); // stops the timer.
    }
});

method(elapsed) {
 // do something
 if(elapsed > 500) {
   this.output.emit({x: somevalue, y: somevalue, f: increasingvalue });
 }
}

茉莉花规格:

it('my spec', inject([JumpService], (service: JumpService) =>{
  array = [];
  //service calls the method
  service.output.subscribe(e => {
   array.push(e);
   // A console statement here will give me the length and the object pushed.
   for(let i = 0; i< array.length - 1; i++) {
    expect(array[i].f).toBeLessThan(array[i+1].f);
   }

  });

}));

我做错什么了吗?我如何应对这种情况?请把我引向正确的方向.

非常感谢.

推荐答案

通常,在测试异步回调函数时,在promise 得到解决后,期望测试的输出总是很重要的.您可以将Angular test bed framework的tick()fakeAsync()结合使用,也可以简单地退回到Jasmine使用done()测试异步方法的一般方法

使用done():

it('my spec', (done) => {
  array = [];
  service.output.subscribe(e => {
   array.push(e);
   for(let i = 0; i< array.length - 1; i++) {
    expect(array[i].f).toBeLessThan(array[i+1].f);
   }
   done();
  });
});

Hope this answer helps.

注意:我在fakeAsync()tick()上运气不好,所以我不在答案中包括它.很抱歉.

Typescript相关问答推荐

类型保护,用于验证是否定义了二元组的每个项

我可以让Typescript根据已区分的联合键缩小对象值类型吗?

类型脚本中的Gnomeshell 扩展.如何导入.ts文件

如何正确修复TypScript 4.7到4.8升级中的TS 2345编译错误

VS代码1.88.0中未出现自动导入建议

找不到带名称的管道''

如果一个变量不是never类型,我如何创建编译器错误?

为什么TypeScript失go 了类型推断,默认为any?''

数组文字中对象的从键开始枚举

TypeScript:在作为参数传递给另一个函数的记录中对函数的参数实现类型约束

无法绑定ngModel.条件ngSwitchCase中的错误

对于合并对象中的可选属性(例如选项),类型推断可能是错误的

记录键的泛型类型

垫表页脚角v15

回调函数中的TypeScrip类型保护返回Incorect类型保护(具有其他未定义类型的返回保护类型)

在打印脚本中将对象类型转换为数组

可以将JS文件放在tsconfig';s includes/files属性?或者,我如何让tsc判断TS项目中的JS文件?

如何实现允许扩展泛型函数参数的类型

无法使用prisma中的事务更新记录

传入类型参数<;T>;变容函数