2016-11-29 15 views
0

ビューの応答コードをテストしようとしていますが、301を取得しているか存在しません。Djangoビューテスト301が返されているか見つからない

urls.py

... 
url(r'^myview/(?P<view_id>.*)/$', view_myview.index, name='myview'), 
... 

テストコード1:

import unittest 
from django.test import Client 

class SimpleTest(unittest.TestCase): 
    def setUp(self): 
     self.client = Client() 
    def test_details(self): 
     response = self.client.get('/myview/123') 
     self.assertEqual(response.status_code, 200) 

上記のコードは与える:

AssertionError: 301 != 200 

テストコード2:

import unittest 
from django.test import Client 

class SimpleTest(unittest.TestCase): 
    def setUp(self): 
     self.client = Client() 
    def test_details(self): 
     response = self.client.get('/myview/123/') 
     self.assertEqual(response.status_code, 200) 

上記のコードが得られます。

Mymodel matching query does not exist. 

私がやりたいすべてのは、彼らがエラーコードを投げていないことを確認するために私の意見の簡単なテストですが、私はそれを行うための正しい方法を見つけるように見えることはできません私はインターネットから多くの、多くの提案を試みました。 view_idに渡す別の方法はありますか?いくつかのクエリパラメータを投げたい場合はどうすればいいですか?

EDIT:私がやっていることを達成するために使った回避策を恐ろしく表示します。私はdumpdataと什器を使用することは永遠に行ったことが分かりました。

from django.test import TestCase 
from django.test import Client 
import os 
from . import urls_to_test # just a simple list of strings 

class SimpleTest(TestCase): 
    """ Simply test if views return status 200 """ 
    def setUp(self): 
     self.client = Client() 
     print('Dumping production database...') 
     os.system("sudo mysqldump mydb > /tmp/mydb.sql") 
     print('Loading production data into test database...') 
     os.system("sudo mysql test_mydb < /tmp/mydb.sql") 
     os.system("sudo rm -rf /tmp/mydb.sql") 
    def test_details(self): 
     for u in urls_to_test.test_urls: 
      print('Testing {}'.format(u)) 
      response = self.client.get(u) 
      self.assertEqual(response.status_code, 200) 
     print('{} URLs tested!'.format(len(urls_to_test.test_urls))) 

答えて

2

Djangoが最後のスラッシュ付きのバージョンにリダイレクトしているため、最初のバージョンは機能しません。

2つ目は、それが動作しない理由を正確に伝えます。つまり、テスト内でID 123のアイテムまたは実際にアイテムを作成していません。

+0

をOH、テストのものは、私のデータベースについて知っていません。私はすでに自分のデータベースにあるデータでビュー(読み取り専用のもの)をテストしようとしていました。私はこれでうまくいく、ありがとう!私は明らかにこれに新しいです。 – user3449833

1

はそのexistanceをテストする前にオブジェクトを作成することを検討して:

import unittest 
from django.test import Client 

from app.models import YourModel 

class SimpleTest(unittest.TestCase): 
    def setUp(self): 
     self.client = Client() 
     self.obj = YourModel.objects.create(*your object goes here*) 

    def test_details(self): 
     response = self.client.get('/myview/123/') # It may be not /123/. It depends on how you generate url for model 
     self.assertEqual(response.status_code, 200) 
関連する問題