0
特定のメソッドが呼び出されたときにいくつかのメソッドが呼び出されるかどうかをチェックするテストルーチンを開発しています。メソッドが約束コールバックによって呼び出されたかどうかのテスト
私はジャスミンを使用しています。
最初のレベルをテストするとうまくいきますが、第1レベルのコールバックコールバック関数内で別のメソッドを呼び出すと、jasmine spyOnは機能しません。ただ、テストのために、私は外にコールバックするために、2つのコード行を移動し、テストが正常に動作します
onLogin(form: NgForm) {
this.submitted = true;
if (form.valid) {
this.auth.login(this.login.username, this.login.password).then((value) => {
if(value) {
this.menu.enable(true, 'loggedInMenu');
this.menu.enable(true, 'loggedOutMenu');
this.navCtrl.setRoot(TabsPage);
} else {
let alert = this.alertCtrl.create({
title: 'Ops',
subTitle: 'Some things wrong.',
buttons: ['OK']
});
alert.present();
}
});
}
}
// Test Routine
describe("onLogin",() => {
it("makes expected calls when authentication successfully",() => {
const menuControllerStub = fixture.debugElement.injector.get(MenuController);
const authStub = fixture.debugElement.injector.get(Auth);
const ngFormStub = fixture.debugElement.injector.get(NgForm);
// it isn't works
spyOn(menuControllerStub, "enable").and.callFake(() => {});
// it's work fine
spyOn(authStub, "login").and.callFake((username:string, password: string) => {
return new Promise((callback, fallback) => {
callback(true);
});
});
comp.onLogin(ngFormStub);
// failed
expect(menuControllerStub.enable).toHaveBeenCalled();
// success
expect(autenticacaoStub.login).toHaveBeenCalled();
});
:
小さな例私のコードならば。たとえば :
onLogin(form: NgForm) {
this.submitted = true;
if (form.valid) {
this.menu.enable(true, 'loggedInMenu');
this.menu.enable(true, 'loggedOutMenu');
this.auth.login(this.login.username, this.login.password).then((value) => {
if(value) {
this.navCtrl.setRoot(TabsPage);
} else {
let alert = this.alertCtrl.create({
title: 'Ops',
subTitle: 'Some thing wrong.',
buttons: ['OK']
});
alert.present();
}
});
}
}
誰でも手伝ってもらえますか?
それは私のコードよりも簡単ですが、まだ動作しません。私はログインコールバックにいくつかのconsole.logを入れました。私は両方のサンプル(あなたと私)がthis.menu.enableメソッドを呼び出すのを見ています。 – andercruzbr
あなたがスパイを 'spyOn(authStub、 'login')と.returnValue(Promise.resolve(true));で変換するとどうなりますか? – trichetriche
同じ動作です。私は問題がspyOn(menuControllerStub、 "enable")メソッドが呼び出されたかどうかをチェックできないと思う。 – andercruzbr