[英]Spy method from dynamically obtained object
我使用貓鼬,並且具有登錄功能,該功能試圖找到用戶然后驗證其密碼(在此我將不描述此功能的所有邏輯,而僅主要部分說明您的問題)。
function login(req, res) {
...
User.findOne(...)
.then((user) => {
user.validPassword(...);
...
});
}
我已經定義了一個包含有效密碼方法的用戶模型,並且一切正常,但是我很難監視有效密碼方法。
我使用Jasmine進行測試,並嘗試通過以下方式進行操作:
const user = new User(...);
spyOn(user, 'validPassword').and.callThrough();
expect(user.validPassword).toHaveBeenCalled(); // was never called :(
當然,我叫登錄功能。 當我以這種方式測試findOne方法時,它可以正常工作,但是它更簡單,因為我從User構造函數中調用了方法:
spyOn(User, 'findOne').and.callThrough();
expect(User.findOne).toHaveBeenCalled(); // this works fine!
我認為我的問題與不同的實例有關,因為findOne方法為我解決了一個新的用戶對象,而在測試中我創建了第二個用戶對象,這是絕對不同的對象,但是我不確定這個猜想。 你能告訴我如何修理嗎?
好的,我解決了這個問題。
1)我在這里找到了解決問題的方法
2)我注意到findOne方法返回promise,然后執行異步任務,因此我必須在開始測試之前使用“ done”功能進行檢查。
function login(req, res) {
...
return User.findOne(...)
.then((user) => {
user.validPassword(...);
...
});
}
在茉莉花中:
beforeAll((done) => {
spyOn(User.prototype, 'validPassword').and.callThrough();
login(...).then(() => done());
}
it('calls validPassword', () => {
expect(User.prototype.validPassword).toHaveBeenCalled(); // works :)
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.