2014-05-08 31 views
5

Symfony2 denetleyicileri test etmek için hala PHP birim testleri üzerinde çalışıyorum. Test sınıflarım, WebTestCase'in türevleridir ve testler GET veya POST isteklerini gerçekleştirir, her şeyin düzgün çalışıp çalışmadığını kontrol edin. Tüm alttaki katmanları test etmek istiyorum, ancak veritabanımı testlerle karıştırmak istemiyorum. Ben, tüm modifikasyonları kontrol etmek için bir test senaryosu oluşturabileceğim bir bellek SQLite db'yi kullanmak istemiyorum. Bunu doktrin 1x ile nasıl yapılacağına dair pek çok ipucu buldum, ancak daha fazla çalışmazlar.Symfony/Doctrine Unit SQLite bellekli testler 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 
    } 
} 

bu işi almak için herhangi bir şans: Yani böyle bir şey istiyor? peşin Hennes

cevap

8

yılında

teşekkürler ben hafıza sqlite veritabanında hiç kullanılmamış ama test için ben kaydedilir sqlite veritabanı kullanıyoruz.

Bunun için

Eğer

Sen belgelerinde

http://docs.doctrine-project.org/projects/doctrine- dbal/en/latest/reference/configuration.html#pdo-sqlite göre bellekte bu değiştirmek mümkün olmalıdır (config_test.yml benim için) test yapılandırma için

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

eklemek gerekir

bellek (boolean): SQLite veritabanının bellek içi olması gerektiğinde doğrudur. (Kalıcı olmayan). Yol ile karşılıklı olarak özeldir. yol önceliklidir.

Yani yapılandırma sonra

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

Merhaba, Melvin. Her şeyden önce, evet, bu işe yarayacaktı. Ancak, soure kodunu değiştirmek benim tercih ettiğim yol değildir, çünkü bu testler otomatik olarak özel bir sunucu üzerinde çalışmalıdır. Yani varsayılan bağlantı manipüle edilmemelidir, ancak başka bir ikinci bağlantıya sahip olmak iyi olur. Testler, varsayılan bağlantılarını programsal olarak değiştirmelidir. Bunu yapmanın bir yolu olmalı. Hennes. – Hennes

+0

Eminim sizi anlıyorsanız, bu aptalca bir açıklama olabilir. Ancak, eğer siz ispatlamıyorsanız, symfony testi env kullanmalısınız. Örneğim örneğin jenkins sunucusunda ve üretimde mükemmel çalışır çünkü yapılandırma yalnızca test env ayarlandığında değiştirilir. Config_test.yml config.yml için bir geçersiz kılma olarak yüklenir, böylece üretiminiz için konfigürasyon değişmeyecektir. – melvin

+0

Ah, benim hatam, üzgünüm. Bilmedim, bu birim testler otomatik olarak test ortamını seçiyor. Bu yüzden, sqlite sürücümü, belirttiğiniz gibi config_test.yml dosyasına uyguladım. İyi çalışıyor. Teşekkür ederim. – Hennes

1

Kolayca EntityManager instance'a kendini oluşturabilir olmalıdır. Bunu kontrol edin helper class Muhtemelen symfony 2'ye sahip değilsiniz, ancak kendi base testCaseClass'ınızı oluşturmak ve gerektiğinde kullanmak için bu fikri kullanabilirsiniz. Bu hatta çekirdek önyükleme gerektirmez.