angular - 测试集间隔
问题描述
我在测试使用 setInterval 的代码时遇到问题。
我在组件中的功能检查当前时间是否在给定时间之后。
我期望 isAfter 标志在开始时应该是假的,6 秒后应该是真的(在 2、3、4 秒应该是假的)
现在它仍然是错误的。
组件代码
isAfter: boolean;
private interval;
ngOnInit(): void {
const now = new Date();
const time = now.setSeconds(now.getSeconds() + 5);
const future = new Date(time);
this.checkTime(future);
}
private checkTime(time: any): void {
this.interval = setInterval(() => {
const now = new Date();
if (now === time) {
console.log('stop');
this.isAfter = true;
clearInterval(this.interval);
} else {
console.log('next');
this.isAfter = false;
}
}, 1000);
}
}
规格代码
import { TestBed, async, ComponentFixture, fakeAsync, tick, discardPeriodicTasks } from '@angular/core/testing';
import { AppComponent } from './app.component';
describe('AppComponent', () => {
let component: AppComponent;
let fixture: ComponentFixture<AppComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent
],
}).compileComponents();
fixture = TestBed.createComponent(AppComponent);
component = fixture.componentInstance;
}));
it ('should check time', fakeAsync(() => {
fixture.detectChanges();
console.log('isAfter 1', component.isAfter);
tick(3000);
fixture.detectChanges();
console.log('isAfter 3', component.isAfter);
tick(6000);
fixture.detectChanges();
console.log('isAfter 6', component.isAfter);
discardPeriodicTasks();
}));
});
解决方案
if (now === time)
此行通过引用进行比较,您在这里有两个不同的日期对象。您应该将其更改为:
if (now.getTime() === time.getTime())
而是比较两个原始数字。
推荐阅读
- c++ - Makefile“重新链接”是什么意思?
- spring-integration - 如何通过 DSL 组合 Spring Integration 流
- python - 将 js 变量传递给 Ckan 中的 Jinja 模板
- pyspark - pyspark - Spark hbase 连接器抛出无法找到数据源
- python - 无法使用 python 或批处理脚本删除最后一个空白行
- android - Android绑定TCP shellcode - 连接被拒绝
- c# - 从内存中删除 UTF 字节的方法?
- python - 如何组合列表并使用条件语句将它们打印出来?Python
- ios - 插入新单元格时,iOS UITableView 删除的单元格内容重新出现
- python - 使用 Pickle 将列表写入文件