0
あなたはCREATEVIEWDjangoのテストクライアントポストデータ
を使用するには、このサイトにログインする必要があるような問題は、「test_create」関数の先頭にログインを追加することにより、Thaianのおかげで解決されています現在、私はcreateviewのテストを書いており、データを投稿できません。
オブジェクトがテストされているが、以下のモデル
class Role(models.Model):
name = models.CharField(max_length=255)
linked_tenant = models.ForeignKey(Tenant, blank=True, null=True)
を持っており、以下の(一般的な)ビュー
class RolCreate(TenantRootedMixin, CreateView):
model = RolTemplate
form_class = RoleForm
def get_form_kwargs(self):
kwargs = super(RolCreate, self).get_form_kwargs()
kwargs['linked_tenant'] = self.request.tenant
return kwargs
def form_valid(self, form):
form.instance.linked_tenant = self.kwargs.get('tenant')
return super(RolCreate, self).form_valid(form)
def get_success_url(self, **kwargs):
return reverse('rol_list', args=[self.request.tenant.slug])
で使用され、これは私が使用しているテストです。
class RolCreate_tests(TestCase):
def setUp(self):
self.tenant = get_tenant()
self.role = get_role(self.tenant)
self.client = Client(HTTP_HOST='tc.tc:8000')
self.user = get_user(self.tenant)
def test_create(self):
response = self.client.post(reverse('rolcreate'), {'name' : 'new_object'})
self.assertEqual(response.status_code, 302)
test_against = Role.objects.get(name='new_object')
self.assertEqual(test_against, self.tenant)
エラーをスローするアサーションは、最後に「get」リクエストです。
DoesNotExist: Role matching query does not exist.
だから、オブジェクトが作成されていない、まだテストは、ポストが行われている意味、302ビューを検証しません。私はこのテストがなぜ必要なことをしていないのか理解できません。誰かが私を助けてくれましたか?
=====
Thaiansの提案は、私は次の値を得た後:
(Pdb) print(self.client.post)
<bound method Client.post of <django.test.client.Client object at 0x10f20da50>>
Pdb) response
<HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/accounts/login/?next=/my/role/create/">
(Pdb) print(response)
Vary: Cookie
Content-Length: 0
Content-Type: text/html; charset=utf-8
Location: /accounts/login/?next=/my/role/create/
PDBは、次の変数の出力を与え、あなたのメッセージをありがとう: 応答: はヴァリ:クッキー のContent-Length:0 のContent-Type:text/htmlの。クライアントの<バインド方法><バインド方法<クライアントのポスト> p>バインドされたメソッド 0x10f20da50 >> –
Jasper
@ Jasperはtest_createの最初の行に追加します。例えば、次のように強制します: 'self.client.force_login(self.user)'これはあなたの問題を解決します。認証されたユーザーだけが新しい役割を作成できる場合[django force_login](https://docs.djangoproject.com/en/1.11/topics/testing/tools/#django.test.Client.force_login) – Thaian
これは私の問題を解決しました! ユーザーのログインを完全に忘れてしまいました。 (私が他のすべての機能にそれを加えたという事実によってさらに悪くなった間違い) あなたの助けに多くの感謝! – Jasper