2017-08-09 9 views
0

DjangoでTDDをやっていて、次の問題に悩まされています。Django - TDD: 'HttpRequest'に 'POST'という属性がありません

のTestCase

def test_home_page_can_save_POST_request(self): 
    request = HttpRequest 
    request.method = 'POST' 
    request.POST['item_text'] = 'A new list item' 

    response = home_page(request) 

    self.assertIn('A new list item', response.content.decode()) 

からクラスのための試験方法及びIのようにエラーを取得しています:

request.POST['item_text'] = 'A new list item' 
AttributeError: type object 'HttpRequest' has no attribute 'POST' 

しかし、HttpRequestのは、Djangoのドキュメントごとなどの属性 'POST' を持っています。

Thansk guys!

答えて

1

あなたはHttpRequestの後に括弧を忘れてしまった:)

をDjangoはHttpRequest has no attribute 'POST'

+0

おかげメイト、私は別のモジュールと数時間のためにそれを解決しようとしてきました。これらのカッコやセミコロンを気にしてください:D – MacR

0

テストするとき、あなたがリクエストオブジェクトが必要な場合は、あなたも1

を生成するために要求ファクトリを使用することができると言っている理由だことドキュメントから参照: https://docs.djangoproject.com/en/1.11/topics/testing/advanced/

from django.contrib.auth.models import AnonymousUser, User 
from django.test import TestCase, RequestFactory 

from .views import MyView, my_view 

class SimpleTest(TestCase): 
    def setUp(self): 
     # Every test needs access to the request factory. 
     self.factory = RequestFactory() 
     self.user = User.objects.create_user(
      username='jacob', email='[email protected]…', password='top_secret') 

    def test_details(self): 
     # Create an instance of a GET request. 
     request = self.factory.get('/customer/details') 

     # Recall that middleware are not supported. You can simulate a 
     # logged-in user by setting request.user manually. 
     request.user = self.user 

     # Or you can simulate an anonymous user by setting request.user to 
     # an AnonymousUser instance. 
     request.user = AnonymousUser() 

     # Test my_view() as if it were deployed at /customer/details 
     response = my_view(request) 
     # Use this syntax for class-based views. 
     response = MyView.as_view()(request) 
     self.assertEqual(response.status_code, 200) 

あなたの場合、テストは次のようになります。

+0

ありがとう、私は間違いなくそれを調べるつもりです。これまでのところ、私は本を読んでTDDを学んでいます – MacR

0

テストケースにはRequestFactoryを使用することを検討する必要があります。ドキュメントから

例:

from django.contrib.auth.models import AnonymousUser, User 
from django.test import TestCase, RequestFactory 

from .views import MyView, my_view 

class SimpleTest(TestCase): 
    def setUp(self): 
     # Every test needs access to the request factory. 
     self.factory = RequestFactory() 
     self.user = User.objects.create_user(
      username='jacob', email='[email protected]…', password='top_secret') 

    def test_details(self): 
     # Create an instance of a GET request. 
     request = self.factory.get('/customer/details') 

     # Recall that middleware are not supported. You can simulate a 
     # logged-in user by setting request.user manually. 
     request.user = self.user 

     # Or you can simulate an anonymous user by setting request.user to 
     # an AnonymousUser instance. 
     request.user = AnonymousUser() 

     # Test my_view() as if it were deployed at /customer/details 
     response = my_view(request) 
     # Use this syntax for class-based views. 
     response = MyView.as_view()(request) 
     self.assertEqual(response.status_code, 200) 
関連する問題