Đảm bảo không có sản phẩm nào trong cơ sở dữ liệu trước khi chạy thử nghiệm tích hợp


7

Tôi đang kiểm tra đơn vị và tích hợp một tiện ích mở rộng nhập / xuất bằng EcomDev_PHPUnit . Đối với một số thử nghiệm tôi phải đảm bảo rằng không có sản phẩm nào trong cơ sở dữ liệu. Vấn đề là một số mô-đun của bên thứ 3 đang tạo ra sản phẩm nhưng không dọn sạch sau đó. Cách tốt nhất để làm việc xung quanh là gì?

Theo tôi, cách tiếp cận sạch nhất sẽ là xác định một vật cố cho EcomDev_PHPUnit rằng tôi không muốn có bất kỳ sản phẩm nào trong cơ sở dữ liệu. Một cái gì đó như thế:

eav:
  catalog_product:

Tôi sợ điều này không được thực hiện trong EcomDev_PHPUnit. (Là nó?)

Một dự đoán khác của tôi sẽ là tôi phải thêm một số mã vào đối tượng của mình setUpđể xóa tất cả các sản phẩm có sẵn thông qua bộ sưu tập sản phẩm.

Cách dễ bị lỗi nhất là xác định tất cả các bảng liên quan đến sản phẩm trong vật cố định và để EcomDev_PHPUnit làm trống chúng.

Thần mạnh mẽ của thử nghiệm tự động, xin vui lòng gửi cho tôi một gợi ý!

Tái bút: Tôi biết rằng thông thường bạn sẽ chế giễu kết quả và không kiểm tra văn bản thực tế vào cơ sở dữ liệu. Vì các bài kiểm tra nên xác minh rằng các sản phẩm được ghi vào cơ sở dữ liệu được Magento công nhận như dự định, tôi đoán tôi phải làm theo cách này. Tôi luôn sẵn sàng để đề xuất.


Tôi có một tập lệnh sẽ xóa tất cả các sản phẩm (và danh mục) ở cấp độ SQL, điều đó có hiệu quả không?
brentwpeterson

Tôi cố gắng tránh các truy vấn SQL tùy chỉnh vì lý do đã biết. Bạn có thấy những lợi thế lớn (hiệu suất - hay nói cách khác) so với việc sử dụng các bộ sưu tập Magento và có thể hủy kích hoạt lập chỉ mục trước không?
Matthias Zeis

Câu trả lời:


2

Như một cách giải quyết, tôi đang thực hiện điều này trong setUpphương thức của mình :

Mage::getModel('catalog/product')->getCollection()->delete();

Lưu ý rằng bạn cũng có thể làm điều đó giống như mô-đun Magento ImportExport và để các ràng buộc khóa ngoài thực hiện công việc để có hiệu suất tốt hơn:

$productResource = Mage::getResourceModel('catalog/product');
$productResource->getWriteConnection()->query("DELETE FROM `{$productResource->getEntityTable()}`");

Xin lưu ý rằng bạn có thể bỏ lỡ một số phép thuật xóa sản phẩm khi bạn thực hiện trực tiếp câu lệnh SQL.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.