2014-06-05 13 views
5

Tôi phải bỏ lỡ điều hiển nhiên ở đây. Tôi đang sử dụng django 1.5.x và sáng tạo unittests, dựa trên lớp djangos TestCase. Tôi có một nhóm các DB được xác định trong các cài đặt khi tôi đang kéo (chỉ đọc) từ nhiều nguồn khác nhau. Khi chạy thử nghiệm tôi chỉ muốn tạo một phiên bản thử nghiệm của db mặc định của tôi, phần còn lại tôi muốn gắn cờ là chỉ đọc và không cố gắng tạo lại như test_db_name (người dùng được định nghĩa sẽ không (không) có quyền tạo các dbs anyway).Cơ sở dữ liệu kiểm tra chỉ đọc Django unittest

Chắc chắn điều này là có thể - như tôi nói tôi phải bỏ lỡ điều hiển nhiên?

Biết ơn vì bất kỳ trợ giúp nào.

Mathew

Trả lời

1

Không rõ ràng, không. Sort-of documented, bạn có thể đặt tên cơ sở dữ liệu để sử dụng trong khi thử nghiệm:

settings.py

DATABASES = { 
    'default': { 
    'ENGINE': 'django.contrib.gis.db.backends.spatialite', 
    'NAME': 'db.sqlite3', 
    'TEST_NAME': '/tmp/test.sqlite3', 
    }, 
} 

Nếu bạn muốn sau đó không xây dựng (hoặc xây dựng lại) cơ sở dữ liệu kiểm tra, bạn sẽ cần phải lặp lại trong các cơ sở dữ liệu tên vào TEST_NAME sử dụng lệnh python manage.py test--keepdb mới để rời khỏi cơ sở dữ liệu nguyên vẹn, thay vì phải Django cố gắng xóa nó giữa các lần chạy. Tính đến tháng 6 năm 2014, bạn phải nâng cấp lên phiên bản phát triển của Django để truy cập vào phiên bản này; cuối cùng điều này sẽ được phát hành ổn định. Nhược điểm của điều này là, như tôi hiểu nó, nó áp dụng cho tất cả các cơ sở dữ liệu, không chỉ các cơ sở dữ liệu chỉ đọc của bạn.

+1

Cảm ơn nhưng tôi nghĩ chúng tôi đã vượt qua dây ?! Vấn đề của tôi không phải là tôi muốn kiểm soát tên của bất kỳ cơ sở dữ liệu thử nghiệm nào được tạo ra, đó là tôi không muốn tạo ra các thử nghiệm ở tất cả, ngoại trừ mặc định. Vì vậy, thay vì quay lên một bản sao trống tôi muốn thử nghiệm của tôi để sử dụng DB được liệt kê trong cài đặt cho các bài kiểm tra khi nó chỉ đọc và cung cấp hồ sơ mà tôi sẽ cần trong các bài kiểm tra. – Mathew

+0

@Mathew bạn có thể nhận được hầu hết các cách có, xem thay đổi – Josh

+2

Vấn đề đối với nhiều người trong chúng ta rằng toàn bộ máy chủ là chỉ đọc đối với một số các dbs phụ. Chỉ định một tên db khác nhau không giúp ích gì. – shacker

0

tôi đã cùng một vấn đề và cố gắng giải quyết nó như thế này:

settings.py

DATABASES = { 
    'default': {...}, 
    'other': {...} 
} 

DATABASE_ROUTERS = ['routers.MyRouter'] 

... 

TESTING = 'test' in sys.argv 

if TESTING: 
    DATABASE_ROUTERS = [] 
    DATABASES.pop('other')  

Nếu bạn không sử dụng db cứng mã hóa định tuyến chẳng hạn như với 'using' và chỉ sử dụng 'DATABASE_ROUTERS', thì giải pháp này sẽ đủ tốt cho bạn.

Tất nhiên, nếu bạn thực sự muốn kiểm tra kết nối với DB từ xa và dữ liệu được lưu trữ ở đó thì đây không phải là cách để đi.

+2

Kỹ thuật này ngăn không cho 'test_other' được tạo ra, nhưng sẽ khiến các kiểm tra thất bại đối với các chế độ xem sử dụng dữ liệu đang sống trong 'other' (vì nó có hiệu quả từ toàn bộ ứng dụng). – shacker

Các vấn đề liên quan