Điều chúng tôi đã ghi đè lên test_runner mặc định để nó không tạo cơ sở dữ liệu mới để kiểm tra. Bằng cách này, nó chạy thử nghiệm đối với bất kỳ cơ sở dữ liệu cục bộ hiện tại của chúng tôi trông như thế nào. Nhưng hãy rất cẩn thận nếu bạn sử dụng phương pháp này vì bất kỳ thay đổi nào đối với dữ liệu bạn thực hiện trong các thử nghiệm sẽ là vĩnh viễn. Tôi đảm bảo rằng tất cả các bài kiểm tra của chúng tôi khôi phục mọi thay đổi về trạng thái ban đầu và giữ phiên bản nguyên sơ của cơ sở dữ liệu của chúng tôi trên máy chủ và sao lưu.
Vì vậy, để làm được điều này bạn cần phải sao chép các phương pháp run_test từ django.test.simple đến một vị trí trong dự án của bạn - tôi đặt tôi trong myproject/test/test_runner.py
Sau đó thực hiện những thay đổi sau đây để phương pháp đó:
// change
old_name = settings.DATABASE_NAME
from django.db import connection
connection.creation.create_test_db(verbosity, autoclobber=not interactive)
result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
connection.creation.destroy_test_db(old_name, verbosity)
// to:
result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
Hãy chắc chắn để làm tất cả những hàng nhập khẩu cần thiết ở phía trên và sau đó trong cài đặt của bạn tập tin thiết lập các thiết lập:
TEST_RUNNER = 'myproject.test.test_runner.run_tests'
Bây giờ khi bạn chạy. /manage.py kiểm tra Django sẽ chạy các bài kiểm tra đối với trạng thái hiện tại của cơ sở dữ liệu của bạn thay vì tạo một phiên bản mới dựa trên các định nghĩa mô hình hiện tại của bạn. phương pháp
Một điều bạn có thể làm là tạo một bản sao của cơ sở dữ liệu của bạn tại địa phương, và sau đó làm một kiểm tra trong run_test mới của bạn() như thế này:
if settings.DATABASE_NAME != 'my_test_db':
sys.exit("You cannot run tests using the %s database. Please switch DATABASE_NAME to my_test_db in settings.py" % settings.DATABASE_NAME)
Bằng cách đó không có nguy cơ chạy thử nghiệm chống lại bạn cơ sở dữ liệu chính.