如何使用代码点火器的PHP规范?

时间:2013-12-15 03:43:12

标签: php codeigniter unit-testing phpspec

我有一个代码点火器项目,我安装了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');
    }
}

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

在你的控制器测试中,你告诉你的匹配器在命名空间中需要一些东西:

controllers\Calculator;

但问题是计算器在上面的控制器类中位于Calculator的命名空间中。如何解决这个问题?只需将该命名空间添加到控制器

即可
namespace controllers;

基本上看起来你删除了它来修复一件事,然后一旦你修复它就忘了把它重新插入。你还没有说如果包含CI_Controller类并使用命名空间控制器会发生什么。计算器位于全局空间中,除非您将其定义为上面的其他内容,但是您在全局范围内的其他空间中引用它

$this->shouldHaveType('controllers\Calculator');

现在,当您将命名空间添加回计算器控制器时会发生什么?