I have a class based view
class HomePage(View):
def get(self, request):
return HttpResponse('<p>This is content.</p>')
and url-pattern defined as below:
urlpatterns = patterns('',
url(r'^$', HomePage.as_view()),
)
To this pattern resolves to current view function, I wrote a test like this:
class HomePageTest(TestCase):
def test_root_url_resolves_to_home_page_view(self):
found = resolve('/')
self.assertIsInstance(found.func, HomePage)
By running this unittest I am getting following error:
self.assertIsInstance(found.func, HomePage)
AssertionError: <function HomePage at 0x7f85dd2c7840> is not an instance of <class 'web.views.HomePage'>
Any Idea how to test this case?
Resolve will return the function that is returned when calling
HomePage.as_view()
, and not an object of that type. However, from a quick test there may be a way that you could write this test:Note that here we specify
HomePage.__name__
instead of'HomePage'
because this will get picked up if the name of the class is changed using refactoring tools.The downside of this is, should you have wired up a view class with the same name but from a different module, this unit test would not fail. Of course this is more of a risk with a generic view class name such as
HomePage
but should be less of a risk with other view classes.