Php Laravel 4单元测试:“;“已发送邮件头”;使用App::instance注入模拟时出错
我不熟悉拉雷维尔和国际奥委会的概念。我在Nettuts()上学习了大量的教程,并成功地测试了我的控制器。但是,我想通过模拟数据库来隔离控制器。当我尝试将模拟对象注入IoC时,我得到以下错误: 无法修改标题信息-标题已由发送(输出开始于/Users/STRATTON/Dev/SafeHaven/vendor/phpunit/phpunit/Util/Printer.php:172) 它引用的行使用“print”构造输出PHPUnit的缓冲区。某些原因导致在设置标题之前发送输出,但我无法跟踪问题 当控制器调用真实模型并进行数据库调用时,我能够成功地运行所有测试。同时,我能够成功地模拟对象,并且能够毫无错误地进行模拟。但是,当我尝试使用App::instance()注入模拟对象时,就会出现错误 我还用PHPUnit的mock测试了这一点,得到了相同的结果。我是否正确地模拟了对象?我对名称空间有问题吗?我是否缺少输出内容的内容 控制器:Php Laravel 4单元测试:“;“已发送邮件头”;使用App::instance注入模拟时出错,php,phpunit,laravel,laravel-4,mockery,Php,Phpunit,Laravel,Laravel 4,Mockery,我不熟悉拉雷维尔和国际奥委会的概念。我在Nettuts()上学习了大量的教程,并成功地测试了我的控制器。但是,我想通过模拟数据库来隔离控制器。当我尝试将模拟对象注入IoC时,我得到以下错误: 无法修改标题信息-标题已由发送(输出开始于/Users/STRATTON/Dev/SafeHaven/vendor/phpunit/phpunit/Util/Printer.php:172) 它引用的行使用“print”构造输出PHPUnit的缓冲区。某些原因导致在设置标题之前发送输出,但我无法跟踪问题 当
<?php namespace App\Controllers;
use App\Models\Repositories\ArticleRepositoryInterface;
class HomeController extends BaseController {
protected $articles;
public function __construct(ArticleRepositoryInterface $articles)
{
$this->articles = $articles;
}
public function index()
{
$articles = $this->articles->recent();
return \View::make('home.index')
->with('articles', $articles);
}
}
回答我自己的问题-出现错误的原因是代码的某些部分导致引发PHP错误或异常
在本例中,问题是从视图中引发的异常。视图希望方法recent()返回的值是一个有说服力的集合(illumb\Database\Eloquent\Collection),或者至少是视图可以迭代的内容
HomeControllerTest::TestIndex方法正在模拟对象,当调用recent()时,它返回“foo”。视图无法在字符串上迭代,因此会引发异常。下面是两种解决方案,后者允许测试视图是否接收到正确的对象类型
$mocked->shouldReceive('recent')
->once()
->andReturn([]);
如果您遇到类似的问题,请检查所有正在测试的代码,并确保您的测试实际满足所有需求/依赖性。。。或者使用TDD。。。我从一开始就应该做一些事情来避免这个问题。回答我自己的问题-出现错误的原因是代码的某些部分导致抛出PHP错误或异常
在本例中,问题是从视图中引发的异常。视图希望方法recent()返回的值是一个有说服力的集合(illumb\Database\Eloquent\Collection),或者至少是视图可以迭代的内容
HomeControllerTest::TestIndex方法正在模拟对象,当调用recent()时,它返回“foo”。视图无法在字符串上迭代,因此会引发异常。下面是两种解决方案,后者允许测试视图是否接收到正确的对象类型
$mocked->shouldReceive('recent')
->once()
->andReturn([]);
如果您遇到类似的问题,请检查所有正在测试的代码,并确保您的测试实际满足所有需求/依赖性。。。或者使用TDD。。。我从一开始就应该做一些事情来避免这个问题。这实际上是一个关于在运行测试用例期间如何处理异常的错误,但是已经修复了,只需运行composer update。这实际上是一个关于在运行测试用例期间如何处理异常的错误,但是已经修复了,只需运行composer update。即使下面的答案解决了上述问题,它也会带来另一个问题。如何在独立于视图的情况下测试控制器?尽管下面的答案解决了上述问题,但它确实提出了另一个问题。如何在独立于视图的情况下测试控制器?谢谢!PHPUnit现在输出异常,我实际上可以跟踪到问题!在问这个问题之前,我已经运行了composer update,所以这一定是一个全新的修复。哪个库导致了这个问题?这个提交实际上解决了它,还有一个关于提交的讨论,谢谢!PHPUnit现在输出异常,我实际上可以跟踪到问题!在问这个问题之前,我已经运行了composer update,所以这一定是一个全新的修复。哪个库导致了这个问题?这个提交实际上解决了这个问题,在