Как mimi c ref и попасть в модульные тесты angular firestore - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь имитировать 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 вызывает проблемы. Есть предложения, как с этим справиться?

...