113👍
For request, I would use RequestFactory included with Django.
from django.test.client import RequestFactory
rf = RequestFactory()
get_request = rf.get('/hello/')
post_request = rf.post('/submit/', {'foo': 'bar'})
for users, I would use django.contrib.auth.models.User as @ozan suggested and maybe with factory boy for speed (with factory boy you can choose to not to save to DB)
54👍
How do you mock users?
Initialise a django.contrib.auth.models.User
object. User.objects.create_user
makes this easy.
How do you mock requests?
Initialise a django.http.HttpRequest
object.
Of course, there are shortcuts depending on what you want to do. If you just need an object with a user
attribute that points to a user, simply create something (anything) and give it that attribute.
- [Django]-What is pip install -q -e . for in this Travis-CI build tutorial?
- [Django]-Folder Structure for Python Django-REST-framework and Angularjs
- [Django]-When to create a new app (with startapp) in Django?
7👍
You can either roll your own mocks, as Anurag Uniyal has suggested, or you can use a mocking framework.
In response to those saying you can just create an ordinary user as you would anyway in Django… I would suggest this defeats the point of the unit test. A unit test shouldn’t touch the database, but by creating a user, you’ve changed the database, hence why we would want to mock one.
- [Django]-Charts in django Web Applications
- [Django]-Django model one foreign key to many tables
- [Django]-Trying to parse `request.body` from POST in Django
6👍
Read about mock objects here
http://en.wikipedia.org/wiki/Mock_object
http://www.mockobjects.com/
And use this python lib to mock a user
http://python-mock.sourceforge.net/
else you can write a simple User class yourself, use this as a starting point
class MockUser(object):
def __call__(self, *args, **kwargs):
return self
def __getattr__(Self, name):
return self
add specfic cases etc etc
- [Django]-What is choice_set in this Django app tutorial?
- [Django]-Celery : Execute task after a specific time gap
- [Django]-Specifying limit and offset in Django QuerySet wont work
6👍
You don’t need to mock Users, as you can just create one within your test – the database is destroyed after the test is finished.
To mock requests, use this snippet from Simon Willison.
- [Django]-Substring in a django template?
- [Django]-Django 1.7 migrate gets error "table already exists"
- [Django]-Django – Circular model import issue
1👍
There are already a lot of good general answers. Here is a simple mock user used in tests involving admin forms:
class MockUser:
is_active = True
is_staff = True
def has_perm(self, *args):
return True
from django.test.client import RequestFactory
request = RequestFactory().get("/some/url")
request.user = MockUser()
- [Django]-What's the difference between ContentType and MimeType?
- [Django]-How do I install psycopg2 for Python 3.x?
- [Django]-How to customize activate_url on django-allauth?