Giter VIP home page Giter VIP logo

Comments (6)

sbatson5 avatar sbatson5 commented on July 18, 2024

It should exist on an instance of a document reference:
https://github.com/Upstatement/firestore-jest-mock/blob/80d43fb58a5fd38646fb71ed67362146687fc19b/mocks/firestore.js#L272-L275

Do you have an example of it not working?

from firestore-jest-mock.

jeunessacheng avatar jeunessacheng commented on July 18, 2024

I'm writing some unit tests with a mocked Firestore collection, and testing reading from the collection after the deletion to see if the document was removed.

await this.firestore.collection(COLLECTION_NAME).doc(docName).delete();
const items = await this.firestore.collection(COLLECTION_NAME).get();
items = items.docs.map(doc => doc.data());

// Check if item was removed from the collection
const removedItem = items.find( i => i.name === docName ); // Note that i.name is the same as document id
expect ( removedItem ).not.toBeDefined(); // This line fails, removedItem is still in the collection

from firestore-jest-mock.

sbatson5 avatar sbatson5 commented on July 18, 2024

Ah. Our delete does not actually mutate the mocked collection. Instead, you can check that mockDelete (the function that overrides our delete function) is called correctly, with the right params.

If our delete on the document reference actually removed the associated document from the fake collection and you asserted that it was removed, then all you would have done is tested that firestore-jest-mock has a function that remoes one item from an array. You wouldn't have actually tested your code, which is what I would argue you would want in this case.

i.e. the way you want to use this library is:
expect(mockDelete).toHaveBeenCalledWith(docName)
you want to assert that you properly called the delete function -- not that the delete function actually did anything. That's firestore's concern, and since we completely overwrite firestore with this testing library, you would really be testing that the authors of this library wrote a function that deleted an item from a collection.

😅 I admit that it seems counter intuitive, but the point of this library is to enable you to test your code and how it interfaces with firestore -- not that firestore performs the actions appropriately.

Hope this helps! Happy to dive in further

from firestore-jest-mock.

jeunessacheng avatar jeunessacheng commented on July 18, 2024

Cool, thanks, I get it now. I guess since I was able to test with add and update, I got high hopes for delete as well. Thanks for answering so promptly!

from firestore-jest-mock.

hffmnn avatar hffmnn commented on July 18, 2024

If our delete on the document reference actually removed the associated document from the fake collection and you asserted that it was removed, then all you would have done is tested that firestore-jest-mock has a function that remoes one item from an array. You wouldn't have actually tested your code, which is what I would argue you would want in this case.

I don't think this is the only use case for a working delete. Code under test could for example delete a document and based on a collection query return the remaining documents (or something like this... more general: the tested code relies on working mutations). If the delete does not mutate the collection, then the system under test behaves differently in tests.

Because this library supports mutability: Is there documentation about calls that mutate vs. calls that don't?

from firestore-jest-mock.

AlmogCC avatar AlmogCC commented on July 18, 2024

I tend to agree with @hffmnn. If mutability wasn't supported the point made by @sbatson5 would be valid. Once mutation is supported, why would delete be the only method excluded from it?

from firestore-jest-mock.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.