我在撰寫單元測驗以測驗具有實體檢查的功能時遇到了問題。商業邏輯:
let status = new B();
const testFunction = () => {
if (status instanceof A) {
console.log('inside A')
} else if (status instanceof B) {
console.log('inside B')
} else {
console.log('No matchers')
}
}
單元測驗:
describe('test', ()=>{
it("should test b", ()=>{
let status = new A()
expect(status).toBeInstanceOf(A) // passes
expect(logSpy).toHaveBeenCalledWith('inside A') // fails and it expects 'inside B'
})
})
我覺得測驗失敗的一個原因是因為在原始檔案中,status回傳了一個 B 類的實體,所以它匹配else if而不是if. 我不確定如何在不更改的情況下測驗此代碼status?有沒有辦法讓我錯過?
編輯:這里的假設是 testFunction() 已經在單元測驗中被呼叫
uj5u.com熱心網友回復:
您可以將狀態作為函式的引數傳遞;
const testFunction = (status) => {
if (status instanceof A) {
console.log('inside A')
} else if (status instanceof B) {
console.log('inside B')
} else {
console.log('No matchers')
}
}
然后 testFunction() 應該以您需要測驗的狀態呼叫;
const status = new A();
testFunction(status);
您的測驗的問題是您正在測驗的函式有自己的范圍,另一種解決方案是模擬變數,但可能最容易混淆
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/468151.html
標籤:javascript 单元测试 开玩笑的
上一篇:單元測驗:模擬框架與存根實作
