2013-09-19 5 views
1

Я работаю над издевательством функции сохранения в Laravel для тестирования. У меня есть событие saving(), которое я пытаюсь проверить. Я пробовал использовать Eloquent::shouldReceive('save'), но он дает фатальную ошибку: Fatal error: Cannot instantiate abstract class Illuminate\Database\Eloquent\Model.Laravel - Unit Testing Model Сохранить

Это мой тест до сих пор:

public function testRemoveAttributesOnSave(){ 
    Eloquent::shouldReceive('save')->once()->andReturn(true); 
    $this->model->attributeA=1; 
    $this->model->attributeB=2; 
    $this->model->save(); 
    $this->assertTrue(!isset($this->model->attributeB)); 
} 

То, что я хочу написать сама за себя на тесте. Я пытаюсь обработать проверку в модели и защитить некоторые атрибуты от включения после сохранения.

Если я собираюсь сделать это неправильно, пожалуйста, дайте мне знать.

ответ

5

Я сделал поиск и нашел ответ на комментарий здесь, на SO

При использовании модели событий (public static function boot()), PHPUnit не регистрирует события, и они идут игнорируются. Теперь остается ответить на вопрос, является ли это ошибкой PHPUnit или ошибкой Laravel, но, надеюсь, это то, что будет рассмотрено в будущих выпусках.

Чтобы преодолеть эту проблему, нужно вручную вызвать метод boot() в тестовом модуле, и вы можете сделать это в setUp():

public function setUp(){ 
    parent::setUp(); 
    Artisan::call('migrate'); 
    $this->seed(); 
    $this->model=new User; 
    User::boot(); 
} 

Надеется, что это помогает любому, используя Laravel и работают на модульном тестировании.