2017-09-16 84 views
0

我想测试一个服务,该服务调用一个真实的后端url并找不到解决方案。我的服务必须从服务器调用数据,并且我想确保数据来自服务,服务处理正确。角度为真实后端的测试服务

因此,这里是我的登录服务的只是一个简单的例子:

@Injectable() 
export class LoginService { 
/** 
* The token, which will be stored on the localStorage. 
*/ 
public token: string; 
//Eventemitter, for updating the navigation, when the user logs in 
@Output() loggedInEm:EventEmitter<any> = new EventEmitter(); 


constructor(private http: Http) { 
    // set token if saved in local storage 
    var currentUser = JSON.parse(localStorage.getItem('currentUser')); 
    this.token = currentUser && currentUser.token; 
} 

login(_mail, _pass): Observable<number> { 
    var headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    var data = { 
     mail: _mail, 
     pass: _pass 
    }; 
    return this.http.post('/login', JSON.stringify(data), { 
     headers : headers 
    }).map((response: Response) => { 
     let res = response.json(); 
     this.logged = res; 
    }); 
} 

public loggedIn() : boolean { 
    return this.logged; 
} 

这是我想测试一下:

describe('Login Service',() => { 

    let loginService: LoginService; 

    beforeEach(() => { 
     TestBed.configureTestingModule({ 
      declarations: [ 
      ], 
      providers: [ 
       LoginService 
      ], 
      imports: [ 
       FormsModule, 
       IonicModule 
      ], 
     }); 
     inject([LoginService], (service) => { 
      loginService = service; 
     }); 
    }); 


    it("Should login user",() => { 
     loginService.login("[email protected]", "123456"); 
     let loggedIn = loginService.loggedIn(); 
     expect(loggedIn).toBe(true); 
    }); 
}); 

,但我得到以下错误: 类型错误:无法读取属性'登录'未定义,所以服务必须是未定义的。我可以嘲笑这项服务,但我想用我在后端服务器上的真实数据库来处理它。

那么可能是什么问题,我该如何解决它?

亲切的问候,

安德烈

+0

也许你忘了导入'HttpModule'到测试模块? –

回答

0

试试这个:

it("Should login user",() => { 
    loginService.login("[email protected]", "123456").subscribe(value => { 
     let loggedIn = loginService.loggedIn(); 
     expect(loggedIn).toBe(true); 
     done(); 
    }); 
}) 
+0

它说,相同:( –

相关问题