2014-05-08 12 views
5

Tôi vẫn đang làm bài kiểm tra đơn vị PHP để kiểm tra các bộ điều khiển symfony2 của mình. Các lớp thử nghiệm của tôi là các dẫn xuất của WebTestCase và các thử nghiệm đang thực hiện các yêu cầu GET hoặc POST để kiểm tra xem mọi thứ có hoạt động tốt hay không. Tôi muốn kiểm tra tất cả các lớp cơ bản, nhưng tôi không muốn làm hỏng cơ sở dữ liệu của mình bằng các thử nghiệm. Tôi không muốn sử dụng các giả lập, nhưng một db SQLite trong bộ nhớ, nơi tôi có thể thiết lập một kịch bản thử nghiệm để kiểm tra tất cả các sửa đổi. Tôi tìm thấy rất nhiều gợi ý về cách thực hiện điều này với học thuyết 1.x, nhưng chúng không hoạt động nữa. Vì vậy, tôi muốn một cái gì đó như thế này:Symfony/Doctrine UnitTests với bộ nhớ SQLite DB

class BlahblahTest extends WebTestCase { 
    public function testXXXYYY() { 
     // 1. Setup a new database with SQLite:memory: 
     // 2. create the database and all tables according the entities in my project 
     $this->createTestScenario(); // 3. 
     $crawler = $this->client->request('GET', '/testpage'); // 4. 
     // 5. Lots of checks against the database and/or the $crawler data 
    } 
} 

Bất kỳ cơ hội nào để có được tác phẩm này?

Cảm ơn trước Hennes

Trả lời

8

tôi không bao giờ được sử dụng trong cơ sở dữ liệu bộ nhớ sqlite nhưng để thử nghiệm tôi làm sử dụng một cơ sở dữ liệu SQLite được lưu.

Cho rằng bạn nên thêm

# app/config/config_test.yml 
doctrine: 
    dbal: 
     default_connection: default 
     connections: 
      default: 
       driver: pdo_sqlite 
       path:  %kernel.cache_dir%/test.db 

Để cấu hình thử nghiệm của bạn (đối với tôi config_test.yml)

Bạn sẽ có thể thay đổi điều này để trong bộ nhớ theo các tài liệu

http://docs.doctrine-project.org/projects/doctrine- dbal/en/latest/reference/configuration.html#pdo-sqlite

bộ nhớ (boolean): Đúng nếu cơ sở dữ liệu SQLite phải nằm trong bộ nhớ (không liên tục). Loại trừ lẫn nhau với đường dẫn. đường dẫn được ưu tiên.

Vì vậy, các cấu hình sau đó nên

# app/config/config_test.yml 
doctrine: 
    dbal: 
     default_connection: default 
     connections: 
      default: 
       driver: pdo_sqlite 
       memory: true 
+0

Xin chào, Melvin. Trước hết, có, điều này sẽ làm việc. Nhưng thay đổi mã soure nó không phải là cách ưa thích của tôi, bởi vì các xét nghiệm này nên chạy tự động trên một máy chủ chuyên dụng. Vì vậy, kết nối mặc định không được thao tác, nhưng sẽ không có kết nối thứ hai nữa. Các thử nghiệm của nó sẽ thay đổi kết nối mặc định của chúng theo lập trình. Phải có cách để làm điều này. Hennes. – Hennes

+0

Không chắc chắn nếu bạn hiểu vì vậy đây có thể là một nhận xét ngu ngốc. Nhưng khi bạn chạy unittests symfony nên sử dụng env test. Ví dụ của tôi cho ví dụ chạy hoàn hảo trên máy chủ và sản xuất jenkins vì cấu hình chỉ thay đổi khi env thử được đặt config_test.yml được nạp như một ghi đè cho config.yml để cấu hình của bạn cho sản xuất sẽ không thay đổi. – melvin

+0

Ah, lỗi của tôi, xin lỗi. Tôi không biết, kiểm tra đơn vị đó tự động chọn môi trường kiểm tra. Vì vậy, tôi đã thực hiện trình điều khiển sqlite của tôi trong config_test.yml như bạn đã đề cập. Hoạt động tốt. Cảm ơn bạn. – Hennes

1

Bạn có thể dễ dàng tạo ra dụ EntityManager tự của bạn. Kiểm tra này helper class Bạn có thể không có nó trong symfony 2 nhưng bạn có thể sử dụng ý tưởng để xây dựng testCaseClass cơ sở của riêng bạn và sử dụng nó khi cần thiết. Điều này thậm chí không yêu cầu khởi động hạt nhân.

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