2012-07-30 30 views
7

Tôi đã cài đặt django-nose 1.0 làm Á hậu thử nghiệm cho dự án Django 1.3.1. Tôi đang làm theo hướng dẫn on the pypi page về các mô hình chỉ thử nghiệm.Django-mũi không tạo mô hình thử nghiệm chỉ trong khi chạy thử

Đây là settings.py testrunner cấu hình của tôi:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

Tôi đã chạy thử nghiệm trong vài tháng sử dụng testrunner này mà không có vấn đề. Bây giờ tôi đang cố gắng thử nghiệm một lớp trừu tượng, và tôi đang sử dụng một mô hình chỉ thử nghiệm, nhưng thử nghiệm cụ thể mà tôi đã viết ném một lỗi.

Theo tài liệu, tôi chỉ cần đưa lớp thử nghiệm vào một trong các tệp được nhập trong khi thử nghiệm. Tôi có các bài kiểm tra ngồi trong một thư mục 'kiểm tra' và chia ra thành một số tệp thử nghiệm nhỏ hơn. Dưới đây là các bài kiểm tra của tôi/model_tests.py (mô hình và ứng dụng cố ý đổi tên vì lý do công việc):

from django.tests import TestCase 
from myapp.models import AbstractFoo 

class Foo(AbstractFoo): 
    pass 


class TestFoo(TestCase): 
    def setUp(self): 
     self.foo = Foo.objects.create(name="Tester", 
             description="This is a test", ...) 
    ... [tests follow] 

Tôi nhận được một lỗi trong dòng đầu tiên của thiết lập:

DatabaseError: relation "tests_foo" does not exist 
LINE 1: INSERT INTO "tests_foo" ("name", "description", "display... 

Và nếu tôi đặt một điểm ngắt trong thử nghiệm và kiểm tra cơ sở dữ liệu, bảng 'tests_foo' (hoặc bất kỳ bảng nào có 'foo' trong tên) không tồn tại.

Bất kỳ ý tưởng nào về lý do mô hình chỉ thử nghiệm không tải?

+0

Tôi nhận được lỗi tương tự với 1,5 ngay bây giờ. Làm thế nào bạn giải quyết điều này, xin vui lòng? –

Trả lời

0

Yup, có vẻ như đây vẫn là một vấn đề. Saw nó với django == 1.6 và == django-mũi 1.3

Một workaround là để đặt tất cả các mô hình trong __init__.py trong thư mục tests/ bạn

vấn đề có liên quan trên GitHub: django-nose/issues/77

0

Bạn cần phải tạo mô hình trong cơ sở dữ liệu thử nghiệm, để thực hiện việc này, bạn cần phải tạo di chuyển hoặc tạo bảng trong cơ sở dữ liệu theo cách thủ công. Bạn có thể kiểm tra việc thực hiện của tôi về biến thể thứ hai https://github.com/erm0l0v/django-fake-model

Mã này nên làm việc như bạn mong đợi:

from django.tests import TestCase 
from myapp.models import AbstractFoo 

from django_fake_model import models as f 


class Foo(f.FakeModel, AbstractFoo): 
    pass 


@Foo.fake_me 
class TestFoo(TestCase): 
    def setUp(self): 
     self.foo = Foo.objects.create(name="Tester", 
             description="This is a test", ...) 
    ... [tests follow] 
Các vấn đề liên quan