我正在尝试在服务上测试一个简单的删除功能。
deleteCharacter(id: string) {
const characterCollectionRef = this.afs.collection<character>('users/' + this.authService.liveUid + '/Characters/');
return characterCollectionRef.doc(id).delete()
}
如果我在注释掉实际间谍和期望的情况下运行以下测试,则测试将毫无错误地完成,让我相信我的模拟工作正常。
如果我取消注释间谍和期望行,我会得到一个错误,指出characterCollectionRef.doc不是函数。我尝试了几种不同的变体,但它们都有某种问题。我显然在这里遗漏了一些关于为此编写间谍和断言的最佳方法的内容。
it('deleteCharacter works', () => {
AngularFirestoreMock.collection.and.returnValue({
doc: function () {
return { delete: function () {
return Promise.resolve()
} }
}
})
// const spy = spyOn(AngularFirestoreMock.collection.doc, 'delete')
service.deleteCharacter('id')
// expect(spy).toHaveBeenCalled()
});
我们可以将要测试的函数和包含的对象声明为单独的属性,然后我们可以轻松地测试这个新创建的属性。
delete