我有一个代码点火器项目,我安装了phpspec。我的问题是,当我在我的类上运行测试时,它会抛出一个错误,它无法找到该类的基类(由代码点火器框架自动加载),即“未找到”类'CI_Controller'。
我尝试手动包含基类的路径并删除似乎可以解决该问题的行namespace controllers;
。但是现在我的phpspec测试失败了class controllers\Calculator does not exist
。
以下是我设置的方法:
我在src的课程>控制器> Calculator.php中:
<?php
//I had to remove the following line for my app to work:
//namespace controllers;
class Calculator extends CI_Controller {...}
我的规格测试&gt;控制器&gt; CalculatorSpec.php:
<?php
namespace spec\controllers;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
//I had to add this line to fix my first problem
include_once '/Users/bradleytrager/Desktop/Workspace/code-ignitor-calculator/system/core/Controller.php';
class CalculatorSpec extends ObjectBehavior
{
function it_is_initializable()
{
$this->shouldHaveType('controllers\Calculator');
}
}
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
在你的控制器测试中,你告诉你的匹配器在命名空间中需要一些东西:
controllers\Calculator;
但问题是计算器在上面的控制器类中位于Calculator的命名空间中。如何解决这个问题?只需将该命名空间添加到控制器
即可namespace controllers;
基本上看起来你删除了它来修复一件事,然后一旦你修复它就忘了把它重新插入。你还没有说如果包含CI_Controller类并使用命名空间控制器会发生什么。计算器位于全局空间中,除非您将其定义为上面的其他内容,但是您在全局范围内的其他空间中引用它
$this->shouldHaveType('controllers\Calculator');
现在,当您将命名空间添加回计算器控制器时会发生什么?