考虑这个服务函数,它检索单个Task并将结果包装在promise中。
beforeEach(() => {
const injector = TestBed.configureTestingModule({
providers: [TaskService, Logger]
});
subject = injector.get(TaskService);
var Datastore = require('nedb');
db = new Datastore({filename: 'test'});
subject.setDBConnection(db);
task = new Task();
task.title = 'Test Task';
task._id = "TEST";
db.loadDatabase();
db.insert(task);
});
it('returns existing record', fakeAsync(() => {
let r = null;
subject.get('TEST').then((doc) => {
r = doc;
console.log(this.result);
});
tick();
console.log("expectation run", r);
expect(result).toBeDefined();
expect(r.title).toEqual('Test Task');
}));
我为get函数编写了这个单元测试:
then
由于某种原因,fakeAsync()和tick()函数无法正常工作,因为在get
块将结果打印到控制台之前,控制台输出显示“期望运行”。 (典型的异步代码执行)。
我做错了什么?如何修复此代码以等待承诺的完成?
我正在关注this page上的示例。我认为问题是由it('should test some asynchronous code', fakeAsync(() => {
let flag = false;
setTimeout(() => { flag = true; }, 100);
expect(flag).toBe(false); // PASSES
tick(50);
expect(flag).toBe(false); // PASSES
tick(50);
expect(flag).toBe(true); // PASSES
}));
调用异步函数本身然后返回必须在测试中解析的promise的事实引起的。
虽然我不明白为什么这不起作用,因为文档中的示例以简化的方式执行完全相同的操作,例如:
xpath