Spec-Zone.ru › Angular 2

MockBackend

Experimental Class

Обзор класса

class MockBackend implements ConnectionBackend {
  constructor()
  
  
  connections : any
  connectionsArray : MockConnection[]
  pendingConnections : any
  verifyNoPendingRequests()
  resolveAllConnections()
  createConnection(req: Request) : MockConnection
}

Описание класса

Заглушка для бэкенда для тестирования сервиса Http.

Этот класс можно внедрить в тесты и использовать для переопределения поставщиков других бэкендов, таких как XHRBackend.

Пример

import {Injectable, ReflectiveInjector} from '@angular/core';
import {async, fakeAsync, tick} from '@angular/core/testing';
import {BaseRequestOptions, ConnectionBackend, Http, RequestOptions} from '@angular/http';
import {Response, ResponseOptions} from '@angular/http';
import {MockBackend, MockConnection} from '@angular/http/testing';

const HERO_ONE = 'HeroNrOne';
const HERO_TWO = 'WillBeAlwaysTheSecond';

@Injectable()
class HeroService {
  constructor(private http: Http) {}

  getHeroes(): Promise<String[]> {
    return this.http.get('myservices.de/api/heroes')
        .toPromise()
        .then(response => response.json().data)
        .catch(e => this.handleError(e));
  }

  private handleError(error: any): Promise<any> {
    console.error('An error occurred', error);
    return Promise.reject(error.message || error);
  }
}

describe('MockBackend HeroService Example', () => {
  beforeEach(() => {
    this.injector = ReflectiveInjector.resolveAndCreate([
      {provide: ConnectionBackend, useClass: MockBackend},
      {provide: RequestOptions, useClass: BaseRequestOptions},
      Http,
      HeroService,
    ]);
    this.heroService = this.injector.get(HeroService);
    this.backend = this.injector.get(ConnectionBackend) as MockBackend;
    this.backend.connections.subscribe((connection: any) => this.lastConnection = connection);
  });

  it('getHeroes() should query current service url', () => {
    this.heroService.getHeroes();
    expect(this.lastConnection).toBeDefined('no http service connection at all?');
    expect(this.lastConnection.request.url).toMatch(/api\/heroes$/, 'url invalid');
  });

  it('getHeroes() should return some heroes', fakeAsync(() => {
       let result: String[];
       this.heroService.getHeroes().then((heroes: String[]) => result = heroes);
       this.lastConnection.mockRespond(new Response(new ResponseOptions({
         body: JSON.stringify({data: [HERO_ONE, HERO_TWO]}),
       })));
       tick();
       expect(result.length).toEqual(2, 'should contain given amount of heroes');
       expect(result[0]).toEqual(HERO_ONE, ' HERO_ONE should be the first hero');
       expect(result[1]).toEqual(HERO_TWO, ' HERO_TWO should be the second hero');
     }));

  it('getHeroes() while server is down', fakeAsync(() => {
       let result: String[];
       let catchedError: any;
       this.heroService.getHeroes()
           .then((heroes: String[]) => result = heroes)
           .catch((error: any) => catchedError = error);
       this.lastConnection.mockRespond(new Response(new ResponseOptions({
         status: 404,
         statusText: 'URL not Found',
       })));
       tick();
       expect(result).toBeUndefined();
       expect(catchedError).toBeDefined();
     }));
});

Этот метод существует только в реализации заглушки, а не в реальных бэкендах.

Аннотации

@Injectable()

Конструктор

constructor()

Подробности о классе

connections : any

EventEmitter экземпляров MockConnection, созданных этим бэкендом. Можно подписаться на него, чтобы реагировать на подключения.

import {ReflectiveInjector} from '@angular/core';
import {fakeAsync, tick} from '@angular/core/testing';
import {BaseRequestOptions, ConnectionBackend, Http, RequestOptions} from '@angular/http';
import {Response, ResponseOptions} from '@angular/http';
import {MockBackend, MockConnection} from '@angular/http/testing';

it('should get a response', fakeAsync(() => {
     let connection:
         MockConnection;  // this will be set when a new connection is emitted from the
                          // backend.
     let text: string;    // this will be set from mock response
     let injector = ReflectiveInjector.resolveAndCreate([
       {provide: ConnectionBackend, useClass: MockBackend},
       {provide: RequestOptions, useClass: BaseRequestOptions},
       Http,
     ]);
     let backend = injector.get(ConnectionBackend);
     let http = injector.get(Http);
     backend.connections.subscribe((c: MockConnection) => connection = c);
     http.request('something.json').toPromise().then((res: any) => text = res.text());
     connection.mockRespond(new Response(new ResponseOptions({body: 'Something'})));
     tick();
     expect(text).toBe('Something');
   }));

Это свойство существует только в реализации заглушки, а не в реальных бэкендах.

connectionsArray : MockConnection[]

Массивная форма представления connections. Этот массив будет обновляться при каждом создании подключения этим бэкендом.

Это свойство существует только в реализации заглушки, а не в реальных бэкендах.

pendingConnections : any

EventEmitter экземпляров MockConnection, которые ещё не разрешены (т.е. с readyState меньше 4). Используется внутри для проверки отсутствия ожидающих подключений через метод verifyNoPendingRequests.

Это свойство существует только в реализации заглушки, а не в реальных бэкендах.

verifyNoPendingRequests()

Проверяет все подключения и вызывает исключение, если какое-либо подключение не получило ответ.

Этот метод существует только в реализации заглушки, а не в реальных бэкендах.

resolveAllConnections()

Может быть использован в сочетании с verifyNoPendingRequests для разрешения любых неразрешённых подключений, если ожидается, что некоторые подключения ещё не получили ответ.

Этот метод существует только в реализации заглушки, а не в реальных бэкендах.

createConnection(req: Request) : MockConnection

Создаёт новый MockConnection. Это эквивалентно вызову new MockConnection(), за исключением того, что он также будет испускать новый Connection в эмиттер connections этого экземпляра MockBackend. Этот метод обычно используется только для тестов самого фреймворка, а не конечными пользователями.

экспортировано из @angular/http/testing/index, определено в @angular/http/testing/mock_backend.ts

© 2010–2017 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://v2.angular.io/docs/ts/latest/api/http/testing/index/MockBackend-class.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API