【发布时间】:2018-05-05 08:33:48
【问题描述】:
在使用 PHPUnit 测试应用程序时,我遇到了路径问题。我有一个名为UserControllerTest的测试:
<?php
require_once __DIR__ . "/../../Controllers/UserController.php";
class UserControllerTest extends \PHPUnit_Framework_TestCase {
private $controller;
protected function setUp() {
$this->controller = new UserController();
}
public function testThatCanGeneratePromoCode() {
$promoCode = $this->controller->generatePromoCode();
$this->assertEquals(20, strlen($promoCode));
}
}
这是在测试UserController 类:
<?php
require_once "../config/DbConnection.php";
require_once "../Model/ConsumerModel.php";
require_once "../Managers/UtilManager.php";
class UserController {
private $dbh;
private $utilManager;
private $model;
/**
* UserController constructor.
* @param null|ConsumerModel $model
* @internal param $dbh
*/
public function __construct(ConsumerModel $model = null) {
$this->dbh = new DbConnection();
$this->utilManager = new UtilManager();
$this->model = $model;
}
public function generatePromoCode() {
$length = 20;
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
}
我在运行测试时不断收到此错误:
PHP Warning: require_once(../config/DbConnection.php): failed to open stream: No such file or directory in C:\Users\MrDan\Documents\code\twinportrait-api\Controllers\UserController.php on line 3
但是,如果我将require_once __DIR__ . 用于UserController 类中的所有必需文件,则测试有效。但是 Heroku 上的部署失败并抛出 500 status code。有关如何解决此问题的任何建议?
这是我的项目结构:
【问题讨论】:
-
脚本执行所在的文件夹不一定是脚本文件所在的位置....您在测试文件夹中执行测试,因此相对路径将相对于测试文件夹, 而不是 UserController 文件所在的文件夹
-
@MarkBaker 好的,我明白,但有什么解决方案?
-
见下文@DanielOMensah
-
首先查看 heroku 上的日志,看看是什么导致了 500 错误