Angular 2 测试 - 异步函数调用 - 何时使用

标签 angular unit-testing karma-jasmine angular2-testing angular-test

在 Angular 2 中进行测试时,什么时候使用 TestBed 中的异步函数?

你什么时候用这个?

 beforeEach(() => {
        TestBed.configureTestingModule({
            declarations: [MyModule],
            schemas: [NO_ERRORS_SCHEMA],
        });
    });

什么时候使用它?

beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [MyModule],
        schemas: [NO_ERRORS_SCHEMA],
    });
}));

谁能给我讲讲这个?

最佳答案

async 完成所有任务之前,

async 将不允许下一个测试开始。 async 所做的是将回调包装在一个区域中,其中跟踪所有异步任务(例如 setTimeout)。所有异步任务完成后,async 完成。

如果你曾经在 Angular 之外使用过 Jasmine,你可能已经看到 done 被传递给回调

it('..', function(done) {
  someAsyncAction().then(() => {
    expect(something).toBe(something);
    done();
  });
});

在这里,这是原生的 Jasmine,我们告诉 Jasmine 这个测试应该延迟完成,直到我们调用 done()。如果我们不调用 done() 而是这样做:

it('..', function() {
  someAsyncAction().then(() => {
    expect(something).toBe(something);
  });
});

测试甚至会在预期之前完成,因为 promise 在测试完成执行同步任务后解决。

使用 Angular(在 Jasmine 环境中),当我们使用 async 时,Angular 实际上会在幕后调用 done。它会跟踪 Zone 中的所有异步任务,当它们全部完成时,done 将在后台调用。

在您使用 TestBed 配置的特定情况下,您通常会在想要compileComponents 时使用它。我很少遇到必须以其他方式调用它的情况

beforeEach(async(() => {
   TestBed.configureTestingModule({
     declarations: [MyModule],
     schemas: [NO_ERRORS_SCHEMA],
   })
   .compileComponent().then(() => {
      fixture = TestBed.createComponent(TestComponent);
   });
}));

当测试使用templateUrl 的组件时(如果你没有使用webpack),Angular 需要发出XHR 请求来获取模板,因此组件的编译将是异步的。所以我们应该等到它解决后再继续测试。

关于Angular 2 测试 - 异步函数调用 - 何时使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40126729/

相关文章:

javascript - 如何在单元测试中触发 element.on ('mouseleave' ) 来调用我的 AngularJS 函数

javascript - 原始异常 : No provider for Router! Angular 2 RC5

angular - 比较 Angular 中的本地化小数

Angular 表单提交不起作用

unit-testing - 为什么 “mock.ExpectQuery”返回 “is without arguments”

asp.net-mvc - 确保 View 存在

unit-testing - 应用测试返回 "NullInjectorError: No provider for Location!"

javascript - Angular 4 的 karma 测试期间出现错误 'Missing: SyncTestZoneSpec'

javascript - 如何解决TypeError : spyOn andReturn is not a function?

json - Angular:HttpErrorResponse :"Http failure during parsing for..."- 从服务器成功返回的字符串