What is the best practice to work efficiently with MongoDB and PHPUnit? What should (or could) I use to mock objects that access MongoDB? PHPUnit Mocker, Mockery, Phrophecy, Phactory?
Test MongoDB Interactions in a PHP Application With Mocking
2.9k Views Asked by Flyingbeaver At
2
There are 2 best solutions below
2
Will
On
Phactory provides direct support for mocking MongoDB.
Edit: Phactory is no longer maintained. However, I've found a new project called php-mongomock that seems to solve this problem:
<?php
use Helmich\MongoMock\MockCollection;
$collection = new MockCollection();
$collection->createIndex(['foo' => 1]);
$documentId = $collection->insertOne(['foo' => 'bar'])->insertedId();
$collection->updateOne(['_id' => $documentId], ['$set' => ['foo' => 'baz']]);
Related Questions in MONGODB
- MongoDb not connecting C#
- How do I link two models in mongoose?
- MERN Stack App - User Avatar Upload - 500 Error After Deployment on Render
- On the server side, it returns undefined but on the client side, logs the values no problem
- Laravel: Using belongsToMany relationship with MongoDB
- What are some MERN projects that will grow me from junior dev to senior
- Save Interface in DB golang
- findOneAndUpdate not updating value in mongodb?
- Get Type Error when using .countDocuments with mongoDB
- Getting a Large Error Output When Calling MongoDB/Mongoose Functions Without an Error Message
- How to enter data in mongodb array at specific position such that if there is only 2 data in array and I want to insert at 5, then rest data is null
- using Python to insert_one to my mongo_db, How do I pass key values into a function?
- SSL Certificate Verification Error When Scraping Website and Inserting Data into MongoDB
- connect ECONNREFUSED 43.205.72.30:27017 while connecting to Atlas
- Vite is probably changing my import path. What should I do?
Related Questions in UNIT-TESTING
- Google Truth.assertThat.contains does not behave similar to List.contains
- What's the best way to breakup a large test in pytest
- How to refer to the filepath of test data in test sourcecode?
- How to mock a dynamic endpoint in Apache Camel Spring Boot
- pytest mock failing when mocking function from imported package
- Jest configuration error while running test case in teamcity
- Resolve paths dynamically based on directory where test (or tested files) is located in Jest
- One-time implementation with Jest's mockResolvedValueOnce within test remains from one test to another
- Why can't I mock the decorator of the function?
- Gitlab pipeline stuck with nx cloud issue
- How to create an improperly closed gzip file using python?
- Nest.js service structure for API integration
- uiState not updating in Tests
- Unit Tests not Compiling or Being found without mod tests in main.rs. Is this a requirement or am I missing some configuration?
- Mocking Stream or Reader in Java Junit
Related Questions in MOCKING
- How to mock a dynamic endpoint in Apache Camel Spring Boot
- pytest mock failing when mocking function from imported package
- Do we need IoC containers in typescript if ts-mock-imports exists
- how to mock default_factory in pydantic model
- Mocking Stream or Reader in Java Junit
- Spring Boot, Tests: Mock inside nested functions
- How to mock a no response from server with Gin Golang
- Pytest PropertyMock not returning different attribute values
- Cannot perform http mock while integration testing flutter
- NestJS: HttpService is not mocked or found within unit-test
- Catching a signature of celery task in pytest
- How to mock a Python function so that it won't be called during import?
- What is the equivalent of sinonStub.callsArg(2).returns({}) in Jest?
- How to mock a function in multiple modules
- How to mock class with param, return this class. As when(new A(any(B.class))).thenReturn(any(A.class));
Related Questions in PHPUNIT
- CakePHP2-PHP8 - Tests with PHPUnit ^9.5
- JobQueued event not being fired in test Laravel 11
- Laravel 11 PHPUnit tests Passport install
- How can I repair the "Latest compiled component path not found" error when testing my Laravel 10 app?
- phpunit partial mock laravel service with parameters in constructor
- Mocking inherited class where new object is created or how to unsmell my class
- phpunit only mock one method of a class
- Symfony Phpunit keeps using actual class instead of mock
- How does Laravel phpunit test assertion "$this->assertAuthenticatedAs($user, $guard = null)" work?
- Warning: XDEBUG_MODE=coverage or xdebug.mode=coverage has to be set
- Can I debug PHPUnit tests in IntelliJ/PhpStorm from devspace or kubectl?
- PhpStorm | PHPUnit | Feature test | Xdebug | Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
- Running PHPUnit from Eclipse result in 0 % for code coverage
- Kohana - HTTP Tests
- PHPUnit Data Provider error: ArgumentCountError: Too few arguments to function, 0 passed in, and exactly 2 expected
Related Questions in PHACTORY
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
If you look at mocking data for SQL databases, there are lots of opinions here.
Given the lack of consensus on SQL, it's even less likely that you will find consensus on the new DBs like MongoDB.
I think there are some important details to consider here.
If you are just trying to mock communications to DB, then the ideal solution is a "fake" implementation of the MongoDB driver. This is probably a lot of work as the driver was never written with "mockability" in mind.
If you have an ODM, then you can simply mock the ODM calls and assume the ODM is doing its job. Ideally the ODM should provide some mockable interface, but this is not always the case.
Again, this answer comes back down to what you're really planning to test and what you consider as a good unit test. Unfortunately, most of these products are still very new so there is very little guidance in this space.