首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角2 RC-5异步测试不工作。

角2 RC-5异步测试不工作。
EN

Stack Overflow用户
提问于 2016-08-22 14:37:05
回答 1查看 474关注 0票数 1

这就是密码:

代码语言:javascript
复制
import {
  async,
  inject,
  TestBed
} from '@angular/core/testing';
import {
  Http,
  Response,
  ResponseOptions,
  RequestOptions,
  BaseRequestOptions,
  ConnectionBackend
} from "@angular/http";
import {MockBackend, MockConnection} from "@angular/http/testing";
import {HttpInterceptor, RequestWrapped} from "./http.interceptor.service.ts";

describe("Http interceptor", () => {
  beforeEach(() =>{
    TestBed.configureTestingModule({
      providers: [
        MockBackend,
        BaseRequestOptions,
        {provide: ConnectionBackend, useClass: MockBackend},
        {provide: RequestOptions, useClass: BaseRequestOptions},
        Http
      ],
    });
  });

  it('should get blogs', inject([Http, MockBackend], (http:Http, backend:MockBackend) => {
    let connection:MockConnection;
    backend.connections.subscribe(connection =>
      connection.mockRespond(new Response(new ResponseOptions('awesome')))
    );
    http.request('data.json').subscribe((res) => {
      expect(res.text()).toBe('awesome2');
    });
  }));
});

这个测试应该失败,显然可怕的是不平等的awesome2,为什么不工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-12 11:51:53

这是因为it方法在异步回调之前完成了执行。在香草茉莉花中,您可以使用done处理异步问题。

代码语言:javascript
复制
it('', function (done) {
  setTimeout(function () {
    expect(2).toBe(2);
    done();
  }, 1000);
});

done知道我们已经完成了所有的异步事件,并且测试已经完成。

使用done,而不是显式调用async,我们应该在async中使用fundtion。这将将整个方法包装在一个区域中,在该区域中,它将跟踪所有异步调用。当所有异步调用完成后,测试就完成了。这与同步测试不同,在同步测试中,一旦方法完成,测试就完成了。

代码语言:javascript
复制
import { async } from '@angular/core/testing';                

                    // async wapper
it('should get blogs', async(inject([Http, MockBackend], (http:Http, backend:MockBackend) => {
  let connection:MockConnection;
  backend.connections.subscribe(connection =>
    connection.mockRespond(new Response(new ResponseOptions('awesome')))
  );
  http.request('data.json').subscribe((res) => {
    expect(res.text()).toBe('awesome2');
  });
})));

还有fakeAsync,它允许你控制“滴答”。

代码语言:javascript
复制
it('should get blogs', fakeAsync(inject([Http, MockBackend], (http:Http, backend:MockBackend) => {
  let connection:MockConnection;
  backend.connections.subscribe(connection =>
    connection.mockRespond(new Response(new ResponseOptions('awesome')))
  );
  let text;
  http.request('data.json').subscribe((res) => {
    text = res.text();
  });
  tick();
  expect(res.text()).toBe('awesome2');
})));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39082321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档