Comments (6)
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.
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.
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.
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.
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.
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)
- Error in @google-cloud/firestore compatibility example HOT 4
- Module firebase-admin not found, mocking skipped HOT 2
- Firestore instance in snapshot.ref go undefined after make a document query request to the database HOT 1
- QueryDocumentSnapshot that passed to trigger functions doesn't contain createTime element HOT 1
- Firebase Cloud Messaging HOT 2
- How to test a trigger HOT 2
- Where query on nested fields HOT 6
- Firestore mock for DocumentReference.create() HOT 7
- Checking for mockUpdate within a datasnapshot forEach HOT 3
- React Native Support HOT 3
- include firebase/admin with 'import' instead of 'require' HOT 4
- Example of multiple tests with different database data? HOT 3
- Jest, `mockDoc` validate collection type (v0.18.0)
- Requires wrong package for firebase 9 HOT 4
- firestore and auth mocks not complete on firebase-admin HOT 1
- broken links for firebase doc references
- `set` without merge overrides _collections HOT 1
- Transfer Repo HOT 9
- Is there a way to test multiple firestore states? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from firestore-jest-mock.