2012-01-10 32 views
6

Có ai biết cách tự kiểm tra di chuyển chính nó sau khi viết không? Rất nhiều lần trong DataMigrations của tôi, tôi đã tìm thấy các lỗi tinh tế ngu ngốc, như True thay vì False cho giá trị mặc định, sai phép chuẩn hóa, v.v.Kiểm tra di cư về phía nam ở Django

Quy ước Nam mặc định là bắt đầu di chuyển với số, vì vậy bạn không thể thậm chí nhập chúng mà không cần sử dụng __import__. Có ai đã đưa ra một vấn đề tương tự? Mọi người giải quyết chúng như thế nào?

Cách tiếp cận rõ ràng nhất sẽ là giữ logic di chuyển trong một mô-đun được nhập riêng biệt và kiểm tra điều đó, nhưng điều đó hơi phức tạp.

+0

Tại sao không chỉ viết các bài kiểm tra đơn vị kiểm tra lược đồ mới? ví dụ: tạo mô hình mà không chỉ định giá trị và kiểm tra xem mặc định chính xác có được sử dụng hay không. –

+0

@Michael: Đó là ok cho sơ đồ, nhưng nó sẽ không tìm thấy một lỗi trong datamigrations. – jammon

+0

Trong trường hợp đó, bạn có thể tạo cơ sở dữ liệu để thử nghiệm di chuyển, điền dữ liệu mẫu, chạy di chuyển và kiểm tra các giá trị cuối cùng. –

Trả lời

2

Tôi tình cờ gặp phải vấn đề tương tự. Vì tôi không tìm thấy cách để thực hiện các kiểm tra về dữ liệu, tôi đã sử dụng các xác nhận để phát hiện dữ liệu bị hỏng:

from django.conf import settings 

class MyModel(models.Model): 
    stupid_error = models.BooleanField(default=False) 

    def __init__(self, *args, **kwargs): 
     super(MyModel, self).__init__(*args, **kwargs) 
     if settings.DEBUG: 
      assert not self.stupid_error 

Ok, hơi khó khăn. Nhưng có vẻ như nó hoạt động.

[Chỉnh sửa] Suy nghĩ về nó một lần nữa, tôi đã tìm thấy một giải pháp tốt hơn nhiều: đưa các bài kiểm tra vào chính DataMigration. Vì di chuyển là mã một lần, nên nó không phải được kiểm tra nhiều lần.

class Migration(DataMigration): 
    def forwards(self, orm): 
     # lots of awesome migration code here 
     # ... 
     for m in orm.MyModel.objects.all(): 
      assert not m.stupid_error 
+0

Không biết, bạn đang pha trộn những thứ không nên cùng nhau, thử nghiệm là một điều và di chuyển là khác .... – Arruda

0

Tôi khá mới ở miền Nam, nhưng vài lần tôi sử dụng nó, tôi đã sử dụng các bài kiểm tra đơn vị và sau đó, ./ manage.py test thực hiện di chuyển, điều này sẽ tìm thấy nhiều lỗi.

Tuy nhiên, điều này có thể không hoạt động trong mọi trường hợp (tôi nghĩ không có dữ liệu trong cơ sở dữ liệu thử nghiệm khi các lần di chuyển này được thực thi).

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