Django 애플리케이션 용으로 작성한 테스트는 SQLite를 처음 사용하는 초기 개발 과정에서 완벽하게 작동했습니다. 이제 배포 준비가 끝났으니 MySQL 서버를 설치 했으니 까.하지만 지금은 내 테스트 중 일부가 실패하고있다.Django 테스트는 SQLite를 사용하지만 SQLite는 사용하지 않습니다.
마지막으로 실패한 테스트는 기능을 수동으로 테스트 할 때 실패하지 않습니다.
무슨 일이 벌어 질 수 있습니까?
나는 특별한 것을하지 않고있다. 모든 뷰는 데이터베이스 헛소리를하고 응답을 보낸다. 타이밍 관련 (스레딩 또는 기타 없음)은 없습니다.
테스트는 모두 django.test.TestCase에서 상속되며 어떤 픽스처도 사용하지 않습니다.
다음은 실패한 테스트의 예입니다.
class BaseTest(TestCase):
def setUp(self):
super(BaseTest, self).setUp()
self.userCreds = dict(username='test', password='a')
# Create an admin user
admin = models.User.objects.create_superuser(
email='', username='admin', password='a')
# Create a user and grant them a licence
user = models.User.objects.create_user(
email='[email protected]', first_name="Mister",
last_name="Testy", **self.userCreds)
profile = models.getProfileFor(user)
node = profile.createNode(
'12345', 'acomputer', 'auser',
'[email protected]', '0456 987 123')
self.node = node
class TestClientUIViews(BaseTest):
def test_toggleActive(self):
url = reverse('toggleActive') + '?nodeId=%s' % self.node.nodeId
self.assertFalse(self.node.active)
# This should fail because only authenticated users can toggle a node active
resp = self.client.get(url)
self.assertEqual(resp.status_code, 403)
self.assertFalse(self.node.active)
# Login and make sure visiting the url toggles the active state
self.client.login(**self.userCreds)
resp = self.client.get(url)
self.assertEqual(resp.status_code, 200)
self.assertTrue(self.node.active)
resp = self.client.get(url)
self.assertEqual(resp.status_code, 200)
self.assertFalse(self.node.active)
그리고 여기처럼 모델이 모습입니다 : 내 로컬 MySQL은 5.5.19 (그래서 그것의 사용 이노)입니다
class Node(models.Model):
@property
def active(self):
'''
Activation state gets explictly tracked in its own table but is
exposed as a property for the sake of convenience
'''
activations = NodeActivation.objects \
.filter(node=self) \
.order_by('-datetime')
try:
return activations[0].active
except IndexError:
return False
@active.setter
def active(self, state):
if self.active != state:
NodeActivation.objects.create(node=self, active=state)
class NodeActivation(models.Model):
node = models.ForeignKey("Node")
datetime = models.DateTimeField(default=datetimeM.datetime.now)
active = models.BooleanField(default=False)
하지만 5.1을 사용하고 배포 서버에서 동일한 오류를 얻을 .56. 테스트는 스토리지 엔진과 상관없이 실패합니다.
그리고 처음에 언급했듯이 SQLite 데이터베이스를 사용하도록 다시 전환하면 모든 테스트가 다시 통과됩니다.
테스트 기초 클래스에서 파생 된 테스트는 무엇입니까? 예 :'TestCase'. 질문이 클래스 구조로 완성 된 실패한 간단한 테스트로 업데이트하십시오. –
테스트가 실패 할 때 나타나는 오류 메시지는 무엇입니까? 테스트 또는 일부 공장에서 일부 비품을 사용합니까? –
@AustinPhillips - 실패한 테스트 중 하나에서 코드를 추가했습니다. 그것은 결국 실패, 마지막 assertion (코멘트) – Hamish