Я пытаюсь имитировать firestore в своем приложении angular. Я нашел этот пример и уже сделал нечто подобное. Однако мне нужно издеваться над функцией get. Эта функция используется в сочетании с параметром ref, который я не использую asp в firestore.
Вот часть моего теста:
beforeEach(() => {
const fakeAFS = jasmine.createSpyObj( 'AngularFirestore', [ 'collection' ]);
fakeAFS.collection.and.returnValue(jasmine.createSpyObj( 'collection', [ 'doc', 'snapshotChanges', 'valueChanges' ]));
fakeAFS.collection().doc.and.returnValue(jasmine.createSpyObj( 'doc', ['valueChanges', 'ref', 'get']));
fakeAFS.collection().doc().ref.and.returnValue(jasmine.createSpyObj( 'ref', ['get']));
fakeAFS.collection().doc().ref.get.and.returnValue( of('FakeDocument'));
fakeAFS.collection().doc().valueChanges.and.returnValue( of('FakeDocument'));
//fakeAFS.collection().doc().update.and.returnValue(Promise.resolve(null));
TestBed.configureTestingModule({
imports: [ ],
providers: [ { provide : AngularFirestore, useValue : fakeAFS },
{ provide : UserService, useValue : mockUserServ } ]
});
service = TestBed.inject(ProfileService);
});
Здесь - это служебная часть, которую я пытаюсь высмеять.
var docRef = this.afs.collection("users").doc(userId);
docRef.ref.get().then((doc) => {
if (doc.exists) {
this.profileStatus.next(doc.data());
} else {
console.log('I am here.');
this.afs.collection('users', ref => ref.where('userName', '==', userId))
.get()
.subscribe(result=> {
result.forEach((doc) => {
this.profileStatus.next(doc.data());
});
});
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
Как видите, часть ref.get вызывает проблемы. Есть предложения, как с этим справиться?