tickAs()在fakeAsync函数内部不等待promises解析

时间:2017-10-22 15:13:03

标签: angular karma-jasmine

考虑这个服务函数,它检索单个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

0 个答案:

没有答案