2017-08-10 27 views
8

ile köşeli 4 arkadan geliştirmeye geçiş Http'den HttpClient'e geçmeden önce, MockBacked kullanarak arkadan bağımsız bir kurulum yaptım. Yeni HttpClient

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

import { subscribers } from '../jsons/subscribers.json'; 
import { TokenService } from '../../authentication/token.service'; 

export function mockBackendFactory(backend: MockBackend, options: BaseRequestOptions, 
    realBackend: XHRBackend) { 

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

       if (url.endsWith('/demographic/subscriber') && method === RequestMethod.Get) { 
     let tokenService: TokenService = new TokenService(); 

     // get username from token 
     let username = tokenService.getUsername(); 

     // find if any subscriber matches login credentials 
     let filteredSubscriber = subscribers.filter(subscriber => { 
      return subscriber.username === username; 
     }); 

     // check to see if the user exists 
     if (filteredSubscriber.length) { 
      let subscriber = filteredSubscriber[0]; 
      connection.mockRespond(new Response(new ResponseOptions({ 
       status: 200, 
       body: { 
        "subscriber": { 
         "id": subscriber.id, 
         "firstName": subscriber.firstName, 
         "lastName": subscriber.lastName, 
         "username": subscriber.username, 
         "preferredEmail": subscriber.preferredEmail 
        } 
       } 
      }))); 
     } else { 
      // else return 400 bad request 
      connection.mockError(new Error('Unauthorized')); 
     } 

     return; 

     }, 500); 

    }); 

    return new Http(backend, options); 
} 

export let MockBackendProvider = { 
    provide: Http, 
    useFactory: mockBackendFactory, 
    deps: [MockBackend, BaseRequestOptions, XHRBackend] 
}; 

ve benim core.module.ts içinde

ben "sağlayıcılar" bölümünde MockBackendProvider koyardı dosyası: Ben benziyordu sahte-backend.provider.ts adlı bir dosya vardı.

Bu, json yanıtlarını çok hızlı bir şekilde almamı sağlar ve bu sağlayıcıyı bir ortam değişkenine göre değiştirmeye ayarlamıştım.

HttpClient'i kullanmaya başladığımda, arka uçbirim alan HttpHandler kullanan bir arka uç parametresi artık almıyor, ancak MockBackend'i kabul edemiyorum.

Geçerli kurulumumun HttpClient kullanılarak yapılabileceğine inanmıyorum ve bununla tamam değilim, ancak yeni modüller ile arka uç akışının nasıl ayarlanacağı konusunda hiçbir fikrim yok.

Her türlü yardım delice takdir edilecektir! Daha fazla kod görmeniz gerekiyorsa lütfen bana bildirin.

+1

Merhaba Shawn:

Ben bu çalışma var nasıl görmek istiyorum herkes için bir örnek yukarı alay var? Testte nasıl yapılacağına sadece kaynakları buldum, ama nasıl yeniden yapılandıracağımı değil. İdeal olarak, “çevre” ayarlarını üretim, geliştirme-alay ve arka arkaya geliştirme ile geçiş yapmak için kullanmak istiyorum. – skofgar

+1

@skofgar Çözümü bir cevap olarak gönderdim. Ödeme benim örneğim. Kurulumumla ilgili soruları yanıtlamaktan mutluluk duyarım. –

+0

Teşekkürler Shawn! Müdahalecilere de bakmaya başladım, ama yaptığınız kadar uzağa gitmedim. Çözümünüzü sağladığınız için teşekkürler! – skofgar

cevap