【发布时间】:2016-08-18 13:18:50
【问题描述】:
为什么“测试 1”中的单元测试返回状态码 500,而不是 200?有人可以解释一下吗? 这是针对相同操作的 2 个测试中的示例,它们返回不同的状态代码。我预计两次测试都是 200 次?
语言控制器
class LanguageController extends Controller implements IEntityViewManager
{
public function showAllView()
{
$allLanguages = $this->languageRepo->orderBy('id');
return view('admin.languages.showAll')->with('languages', $allLanguages);
}
}
LanguageControllerTest
class LanguageControllerTest extends TestCase
{
public function __construct($name = NULL, array $data = array(), $dataName = '')
{
parent::__construct($name, $data, $dataName);
}
public function setUp()
{
parent::setUp();
}
public function tearDown()
{
Mockery::close();
}
protected function setUpMock()
{
$mock = Mockery::mock(LanguageRepositoryInterface::class);
$this->app->instance(LanguageRepositoryInterface::class, $mock);
return $mock;
}
// test 1
public function testShowAllLanguages()
{
$mock = $this->setUpMock();
$mock->shouldReceive('orderBy')->once()->andReturn([1]);
$result = $this->action('GET', 'Entities\LanguageController@showAllView');
var_dump("Test 1 : " . $result->getStatusCode()); // RETURNS 500
}
// test 2
public function testShowAllView()
{
$result = $this->action('GET', 'Entities\LanguageController@showAllView');
var_dump("Test 2 : " . $result->getStatusCode()); // RETURNS 200
$this->assertViewHas('languages');
$this->assertResponseOk();
}
}
cmd 中的响应:
【问题讨论】:
-
你试过查看 Laravel 错误日志文件吗?
-
查看日志文件会很有帮助,但我猜你没有正确地模拟 languageRepo
-
在
app/exceptions/Handler.php中为$dontReport(不应该报告的异常类型列表)设置一个空数组有助于解决测试中的错误,因为可以通过这种方式在日志中查看它们。
标签: php unit-testing laravel laravel-5 mockery