2016-09-12 4 views
2

Мне нужно динамически активировать некоторые «живые издевки» в моем приложении «Угловое 2» для определенного URL-адреса в некоторых динамических условиях (это не модульное тестирование!).Угловой 2 - MockBackend - эквивалентный проход?

В угловом 1, я использовал, чтобы включить насмешку, используя регулярное выражение, и другие запросы «проходят» с использованием метода с тем же именем.

Но в угловой 2, я застрял со следующим кодом:

this.backend.connections.subscribe((c: MockConnection) => { 
    // ... 
    if (regexp.test(c.request.url) && c.request.method === 0) { 
     c.mockRespond(...); 
    } else { 
    // WHERE IS MY c.passThrough() method ???? 
    } 
}); 

Есть ли способ сказать фиктивный бэкенд играть в «реальном» вызывает в некоторых ситуациях?

ответ

2

Вы можете сделать это, в том числе реального XHRBackend как зависимость к вашему поддельному поставщику бэкэнд, а затем с помощью реального бэкенда для выполнения запроса HTTP на сервер для любого unmocked URL, как это:

import { Http, BaseRequestOptions, Response, ResponseOptions, RequestMethod, XHRBackend } from '@angular/http'; 
import { MockBackend, MockConnection } from '@angular/http/testing'; 

export let fakeBackendProvider = { 
    // use fake backend in place of Http service for backend-less development 
    provide: Http, 
    useFactory: (backend: MockBackend, options: BaseRequestOptions, realBackend: XHRBackend) => { 
     // array in local storage for registered users 
     let users: any[] = JSON.parse(localStorage.getItem('users')) || []; 

     // configure fake backend 
     backend.connections.subscribe((connection: MockConnection) => { 
      // wrap in timeout to simulate server api call 
      setTimeout(() => { 

       // mocked urls handled here ... 

       // pass through any requests not handled above 
       let realHttp = new Http(realBackend, options); 
       realHttp.get(connection.request.url).subscribe((response: Response) => { connection.mockRespond(response); }); 

      }, 500); 

     }); 

     return new Http(backend, options); 
    }, 
    deps: [MockBackend, BaseRequestOptions, XHRBackend] 
}; 

См. this post для получения более подробной информации и демонстрации

+0

Посетите сообщение! – hugsbrugs

Смежные вопросы