2013-06-04 2 views
1

Каков способ тестирования моих пакетов в верстаке. Если я напишу единичный тест, то классы не будут загружены автоматически. Таким образом, это означает, что:Laravel workbench unit test

<?php 

use \Mockery as m; 

class ExampleTest extends TestCase { 

public function tearDown() 
{ 
    m::close(); 
} 

/** 
* A basic functional test example. 
* 
* @return void 
*/ 
public function testShouldReturnValidServer() 
{ 

    $mock = m::mock('MailChimp[sendCurl]'); 

    MailChimp::listSubscribe(array('id' => 'c79a023ff2', 'email_address' => '[email protected]')); 

    } 
} 

приводит к ошибке, указав, что класс TestCase не найден. Когда я добавляю класс TestCase к автозагрузке в моем composer.json (тот, что находится в папке моего пакета), класс доступен. Однако после этого я получаю следующую ошибку, которую «Illuminate \ Foundation \ Testing \ TestCase» недоступна и т. Д. И т. Д. Итак, мой вопрос заключается в том, что мне следует автозагружать в моем компоновщике.json в папке моего пакета? Все так же, как в моем основном композиторе.json, или есть какой-то другой способ, который мне не хватает.

Я знаю, что в Мануэлем он говорит:»

Вы можете мерзавец инициализации от верстака/[поставщика]/[пакет] каталог и мерзавец нажать пакет прямо с рабочего места! Это позволит вам удобно разработать пакет в контексте приложения, не будучи тормозится постоянными командами обновления композитор.

Однако я не понимаю. Может кто-то объяснить, что имеется в виду под этим? Кстати я знаком с мерзавцем. I просто не получают контекста.

EDIT1 Насколько я понял, теперь вы нажимаете свой пакет в свой репозиторий, а затем включаете его в свой основной композитор.json в качестве пакета. Я просто не понимаю, как это полезно при разработке. Надеюсь, я это понимаю. :)

EDIT2 Я был неправ. Вы держите свой пакет в верстаке, пока он не станет стабильным. Точно так же, как Нилс указал ниже. Вопрос все еще остается. Как создать среду, в которой я могу выполнить модульный тест при запуске приложения. Я имею в виду, как тестировать модель, где я могу издеваться над фасадами и т. Д. Или это происходит в плохой практике рабочего стола?

+0

В руководстве указано точно противоположное: если вы храните свой пакет в верстаке во время разработки, вам не нужно использовать композитор.Как только он станет стабильным, и вы хотите использовать его в другом месте, вы должны добавить его в composer.json. –

+0

Спасибо. Это правда. Тогда где это предложение git push? – driechel

+0

Ну, вы хотите, чтобы ваш пакет (тот, который сейчас находится в «workbench») находится под управлением версии, но отделен от 'composer'. Поэтому, если вы используете git, вы можете «git push» в вашей «рабочей области». Ваш пакет не будет отображаться в 'composer.json', но может быть установлен в вашей системе. –

ответ

7

Я создал пакет для этой цели в https://github.com/orchestral/testbench

+2

Как бы вы проводили тесты на рабочем месте? 'phpunit' из' workbench/vendor/package' или из корня laravel? Вам нужно обновить файл laravel 'phpunit.xml' или добавить его в свой пакет workbench? – brent

+0

Я также хотел бы уточнить –

+0

Этот пакет только что стал моим новым фаворитом. –

0

Продлить от правильного пространства имен, и вы должны иметь возможность запускать тесты из пакадж.

class ExampleTest extends \Illuminate\Foundation\Testing\TestCase { 
    .. 
} 

Смотрите также Laravels neat testing helpers in workbench?

2

Если вы не против слияния результатов вашего тестирования верстака с результатами вашего основного приложения, вы можете просто добавить дополнительные каталоги в свой основной phpunit.xml в вашем Laravel корень так:

<testsuites> 
    <testsuite name="Application Test Suite"> 
     <directory>./app/tests/phpunit/</directory> 
     <directory>./workbench/vendor/packageOne/tests/</directory> 
     <directory>./workbench/vendor/packageTwo/tests/</directory> 
    </testsuite> 
</testsuites> 

Затем в папке тестов вашего пакета, поместите ваши тесты PHPUnit, как обычно, вместе с файлом TestCase.php, регулируя функцию createApplication(), чтобы быть:

<?php 

class TestCase extends \Illuminate\Foundation\Testing\TestCase { 

public function createApplication() 
{ 
    $unitTesting = true; 
    $testEnvironment = 'testing'; 
    return require './bootstrap/start.php'; 
} 

Убедитесь, что ваш пакет composer.json автопогрузчиков нагрузки, TestCase.php файл, например так:

"autoload": { 
    "classmap": [ 
     "tests/phpunit/TestCase.php"   
    ] 
} 

Run композитор дамп-автозагрузка -o, чтобы получить все выровнены, а затем вы должны быть в состоянии работать phpunit от вашего корня laravel, и он проверит ваше приложение и ваши пакеты.

+0

Огромное спасибо! –