2017-07-20 7 views
0

を作成し、私は私がJSONであるべきmockbackend応答を作成しましたが、応答が角度4単位が未定義答え

describe('LoginService',() => { 

    beforeEach(() => { 
    TestBed.configureTestingModule({ 
     imports: [HttpModule], 
     providers: [ 
     MockBackend, 
     BaseRequestOptions, 
     { provide: XHRBackend, useClass: MockBackend }, 
     LoginService, 
     ] 
    }); 
    }); 


    it('should set the token,user and role', inject([LoginService,XHRBackend], (service,mockBackend)=>{ 

     const mockResponse= { 
      role:'mockRole', 
      user:'mockUser', 
      token:'mockToken' 
     }; 
     mockBackend.connections.subscribe((connection)=>{ 
       connection.mockRespond(new Response(new ResponseOptions({ 
         status:200, 
         body:JSON.stringify(mockResponse) 
       }))); 
     }); 
     console.log(mockBackend); 
     service.login('mockuser','mockpassword').subscribe((response)=> 
      {console.log(response.json);} 
     ); 
     expect(service.isLoggedIn()).toEqual(true); 
    })); 
を定義されていない角度テスト

export class LoginService implements OnInit { 
    private authUrl = 'http://localhost:8080/login'; 
    private headers = new Headers({'Content-Type': 'application/json'}); 
    constructor(private http: Http) {} 

    ngOnInit() { 
    } 

    login(username: string, password: string) { 

     let _sub = this.http.post(this.authUrl, JSON.stringify({username: username, password: password})) 
     .map((response: Response) => { 
     let token = response.json()['Token']; 
     let role = response.json()['Role']; 
     if (token) { 
      localStorage.setItem('currentUser', JSON.stringify({username: username, token: token, role: role})); 
      return true; 
     } else { 
      return false; 
     } 
     }).catch((error: any) => Observable.throw(error.json().error || 'Server error')); 
     return _sub; 
    } 
    getToken(): String { 
    let currentUser = JSON.parse(localStorage.getItem('currentUser')); 
    let token = currentUser && currentUser.token; 
    return token ? token : ''; 
    } 
    logout(): void { 
    localStorage.removeItem('currentUser'); 
    } 
    isLoggedIn(): boolean { 
    let token: String = this.getToken(); 
    return token && token.length > 0; 
    } 

でこのサービスをテストしようとしています

私がログから伝えることができる限り、モックバックエンドはログインサービスに正しく注入され、応答が登録されます

答えて

0

login方法は012を置きますbooleanの応答を変更する演算子は、login()から得ることができるのはtrueまたはfalseです。あなたは、undefinedを得るconsole.log(response)代わりのconsole.log(response.json)に試してみて、あなたはおそらくtrueまたはfalseのいずれかを持っていますので、言われていること

boolean.jsonは、プロパティことはできません。

+0

ありがとうございました!私のmockResponseに「トークン」の代わりに「トークン」があったので問題はありましたが、現在はすべて動作しています。 –

+0

@titusbocioc受諾された回答をチェックして、尋ねられた質問に印を付け、他の人があなたを助け、「問題が解決しました」というこのコメントを見つけるのを避けることを忘れないでください。 – Supamiu