2014-12-13 3 views
2

Я использую код для запуска приемочных тестов для приложения laravel. Одна из проблем, с которыми я столкнулась, заключается в том, что мои тесты входа в систему начинают сбой, когда страница входа в систему кэшируется, и, я думаю, я автоматически вхожу в систему. Я думаю, что это так, потому что мои тесты начинают проходить снова, когда я очищаю кеш, и они, как правило, начинают сбой без моего изменения тестов или кода приложения вообще.Очистка кеша для приложения laravel 4 до тестов на кодирование

Вот тест Войти под вопросом, теперь извлечены в вспомогательный метод

public function login($username, $password, $I) { 
    $I->amOnPage('users/login'); 
    $I->fillField('email', $username); 
    $I->fillField('password', $password); 
    $I->click('Login'); 
    $I->amOnPage('admin/'); 
    $I->see('Welcome'); 
    } 

Я очистка кэша периодически всякий раз, когда тесты не но это становится утомительным. Я хотел бы иметь возможность зарегистрировать помощника, чтобы очистить кеш для меня и просто вызвать функцию во всех моих тестах. Я извлек функцию в качестве помощника, как предложено here с помощью следующей функции в AcceptanceHelper.php:

public function clearCache($I) { 
    $cache = $this->getModule('Cache'); 
    $cache->flush(); 
    } 

Это, кажется, что было предложено в документации here, но я получаю ошибку «Модуль кэша не может быть связанный". Похоже, мне нужен модуль Laravel4, так что я добавил, что в мой файл acceptance.suite.yml, но не повезло там либо я получил эту ошибку:

SQLSTATE[28000] [1045] Access denied for user 'stephen'@'localhost' (using password: NO) 

Я думал, что я должен разрешить MySQL в конфигурационном файле , но это тоже не сработало. Вот мой acceptance.suite.yml файл:

class_name: AcceptanceTester 
modules: 
    enabled: 
     - PhpBrowser 
     - AcceptanceHelper 
     - Laravel4 
    config: 
     PhpBrowser: 
      url: 'http://104.131.29.69:8000/' 
     Laravel4: 
      user: 'root' 
      password: 'pAsSwOrD' 

Наконец я прочитал this ответ, и казалось, что я не должен на самом деле включили Laravel4 в конфигурационный файл, и что моя вспомогательная функция должна выглядеть следующим образом:

public function clearCache($I) { 
$L = $I->getLaravel4(); 
Cache::flush(); 
} 

Но я просто ветер получаю эту ошибку вместо того, чтобы:

Class 'Codeception\Module\Cache' not found 

Так я застрял. Благодаря!

ответ

1

Хорошо, поэтому я понял, как это сделать. По-видимому, есть модуль под названием cli, который вы можете включить в файл acceptance.suite.yml, как это:

class_name: AcceptanceTester 
modules: 
    enabled: 
     - PhpBrowser 
     - AcceptanceHelper 
     - Cli 

Этот модуль позволяет использовать команды оболочки в сценарии с функцией runShellCommand(). Поскольку мой кэш хранятся в файлах в приложении/хранение/кэш/каталоге команда оболочки Мне нужно выполнить это: кэш

rm app/storage/cache/* 

и вуаля очищается. Тогда в тестовый файл будет выглядеть следующим образом:

$I->runShellCommand('rm -rf app/storage/cache/*'); 

я решил упростить этот бит, включив его в функции я использовал для входа, так как я знал, что я хочу, чтобы очистить кэш перед каждым логином Я просто включил эту строку в функцию входа в AcceptanceHelper, которая затем доступна во всех моих тестах.

Это немного обходное решение, так как оно не является агностиком того типа кэширования, который я использую (если бы я использовал memcached, мне нужно было бы сделать что-то другое), но это сработало для меня, поэтому я подумал, d поделиться им.

+1

Вы также можете использовать модуль под названием FileSystem: http://codeception.com/docs/modules/Filesystem Просто включите его в файл acceptance.suite.yml: 'модулей: включено: - Cli' Затем вы можете написать в своем тесте что-то вроде: '$ I-> cleanDir ('app/storage/cache');' –