sai*_*y2k 3 php rest phpunit slim
我正在使用PHPUnit跟踪Slim的测试设置@ http://there4development.com/blog/2013/10/13/unit-testing-slim-framework-applications-with-phpunit/
最初我在匿名函数中拥有所有逻辑
$app->get('/video/', function () use ($app) {
// all code goes here
}
Run Code Online (Sandbox Code Playgroud)
并通过PHPUnit进行测试工作得很好......
public function testVideoCountInPage1() {
$this->get('/video/');
$this->assertEquals(200, $this->response->status());
$rawResponse = $this->response->body();
$jsonResponse = json_decode($rawResponse);
$this->assertSame(20, count($jsonResponse->data));
}
Run Code Online (Sandbox Code Playgroud)
但现在,我将`get('/ video /')中的核心逻辑拆分成多个函数,如下所示:
$app->get('/video/', function () use ($app) {
// some logic
$db = openDB($dbConfig);
$page = findPageParameter($app->request()->params());
// some logic
}
function openDB($dbConfig) {
// open DB here
return $db;
}
function findPageParameter($params) {
// find page here
return (int)$page;
}
Run Code Online (Sandbox Code Playgroud)
我仍然得到适当的响应呼叫/video端点.但单位测试失败,说
.PHP Fatal error: Cannot redeclare openDB() (previously declared in /var/www/traffic/app/routes/video.php:69) in /var/www/traffic/app/routes/video.php on line 75
更新:该错误得到了固定,一旦我换成夫妇require用require_once.但现在测试中的断言未能说明
1) videoTest::testVideoCountInPage1
Failed asserting that 404 matches expected 200.
Run Code Online (Sandbox Code Playgroud)
当我调用相同的终点时http://localhost/traffic/index.php/video,我将获得具有正确结果的状态200.当PHPUnit调用相同的端点时,它返回404
更新2:单元测试,我测试各个功能,openDB()并findPageParameter()正常工作.只有SLIM REST API的端到端测试失败了404 ...
参考:
(某种程度上)类似的问题也有类似的答案.我确信你可以找到解决这个问题的方法,但很快就会看到如何修复会话,重置环境配置等等,因为PHPUnit是一个单元测试框架,按照定义,单位比请求更小. .
这是功能/验收测试领域,有一个名为Behat的神话般的框架.你应该做自己的研究,但实质上,虽然PHPUnit非常擅长测试或多或少独立的功能块,但它很难测试更全面的请求执行等更大的事情.稍后您将开始遇到会话错误,配置错误的环境等问题,因为每个请求都应该在它自己的独立空间中执行,并强制它执行相反的操作.另一方面,Behat以一种非常不同的方式工作,对于每个场景(发布机器人,查看不存在的页面),它向服务器发送新的请求并检查结果.它主要用于通过对最终结果进行断言(响应对象/ html/json)来最终测试所有协同工作.
如果您想以正确的方式测试代码,请考虑使用正确的工具.一旦你了解了Behat,你就会爱上它+你可以在Behat中使用PHPUnit来做出单独的断言.
| 归档时间: |
|
| 查看次数: |
1010 次 |
| 最近记录: |