0

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

我在规范 > 控制器 > 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');
    }
}

谁能帮我让它工作?

4

1 回答 1

1

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

controllers\Calculator;

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

namespace controllers;

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

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

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

于 2013-12-16T03:58:02.517 回答