2017-07-27 85 views
0

我有一個簡單的函數修改我的app.component.ts中的參數,我想用間諜測試函數。我的changeText函數總是未定義出於某種原因,我在做什麼錯?角4茉莉間諜單元測試「預計未定義爲'新文本'

AppComponent.ts

export class AppComponent { 
    text = "My text"; 

    changeText = function() { 
     this.text = "New text"; 
     return this.text; 
    } 
} 

AppComponent.spec.ts

describe("my text with Spies", function() { 
     it("should be altered", function() { 
     const fixture = TestBed.createComponent(AppComponent); 
     const app = this.fixture.debugElement.componentInstance; 

     spyOn(app, 'changeText'); 

     expect(app.text).toBe("My text")  
     expect(app.changeText()).toBe("New text");   //Fails 
     expect(app.changeText).toHaveBeenCalledTimes(1); 
    }); 
}); 
+0

請告訴我的錯誤? – onetwo12

+0

規範失敗,錯誤「預期未定義爲'新文本'因此,changeText的輸出由於某種原因未定義。 – kikilolohu

+0

也許引用此:https://stackoverflow.com/questions/35987055/how-to-write-unit -testing-for-angular-2-typecript-for-private-methods-with-ja?rq = 1可能是一個範圍界定問題 – rcheuk

回答

1

嘗試添加這種改變如果這實際上仍然

更改此:

expect(app.changeText()).toBe("New text"); 
expect(app.changeText).toHaveBeenCalledTimes(1); 

到:

app.changeText(); 
expect(app.text).toBe("New text"); 
expect(app.changeText).toHaveBeenCalled(); 
+0

看起來不錯,但是你可以在編輯時詳細說明爲什麼這樣可以解決問題嗎 – Rumid

+1

是的,因爲你的changeText()方法改變了this.text,所以你應該檢查這個文本,你也可以編寫const text = app.changeText()然後expect(text).toBe(「New text」)。想要檢查返回值 –

+0

我的意思是把這個添加到你的答案中,一般試圖描述一下應該幫助的代碼,它是做什麼的,爲什麼OP的代碼不起作用等等 – Rumid