このログイン機能、具体的にはhttpのポスト部分をユニットテストするにはどうすればよいですか?私が作ったhttpモックは、コードのif ... elseセクションに入るために正しくコード化されていません。私はTestBedを使いたくない。 TestBedが遅すぎます。以下はTestBedを使わずにhttp postをAngularでモックアウトするにはどうすればよいですか?
login(username: string, password: string): Observable<boolean> {
const headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('accept', 'application/json');
let options = new RequestOptions({ headers: headers });
return this.http.post('https://blah/api/login',
JSON.stringify({ username: username, password: password }), options)
.map((response: Response) => {
const token = response.json() && response.json().access_token;
if (token) {
this.token = token;
localStorage.setItem('currentUser', JSON.stringify({ username: username, token: token }));
return true;
} else {
return false;
}
}).catch(this._serverError);
}
private _serverError(err: any) {
return Observable.throw(err || 'backend server error');
}
ジャスミンテストImがしようとしている:私は、この行を支援する必要があります。
spyOn(mockHttp,'post').and.returnValue(Observable.of(response));
私のreturnValueは、ログイン機能の 'if ... else'コードの中に入るべきですか?
describe('AuthenticationService',() => {
let service: AuthenticationService;
let mockHttp = null;
beforeEach(() => {
mockHttp = {};
mockHttp.post = function(){};
service = new AuthenticationService(mockHttp);
});
it(`should set access token in local storage for successful login`,() => {
const access_token = 'blah83balc380';
const responseOptions = new ResponseOptions();
responseOptions.status = 200;
responseOptions.body = {access_token:access_token};
const username = 'test';
const currentUserExpected = JSON.stringify({ username: username, token: access_token });
var response = new Response(responseOptions);
spyOn(mockHttp,'post').and.returnValue(Observable.of(response));
service.login(username, 'test');
var currentUser = localStorage.getItem('currentUser');
expect(currentUserExpected).toEqual(currentUser);
});
});
あなたはそのようなことをしたいのですか? 'json()'関数などをモックする必要があります。ちょっと面倒です。あなたがそれを扱うことができないので、これはTestBedでのテストが優れているという証拠と考えることができます。 Btw、コードの書式設定が間違っている、質問は読めません。 – estus
@estus TestBedテストは遅いです。 TestBedを使用する100回のテストを実行するのにどれくらい時間がかかりますか?長すぎる。だから絶対に必要でない限りTestBedを使いたくないのです。 TestBedによるテストは優れていません。あなたのコメントは役に立たず、役に立たない。 – user372225
あなたがそれを感謝しなければ、これはコメントを役に立たないものにしません。彼らが完全なカバレッジを提供しない場合、効率的な100回のテストはどれくらいですか? TestBedでDIを正しくテストできます。あなたはそれなしではできません。あなたが質問の中でパフォーマンスに問題があるという言葉さえありません。待ってください、言及がありますが、フォーマットが正しくないので見えません。 – estus