Как использовать спецификацию php с воспламенителем кода?

У меня есть проект воспламенителя кода, и я установил 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');
    }
}

Может ли кто-нибудь помочь мне заставить это работать?


person Bradley Trager    schedule 15.12.2013    source источник
comment
Вы пробовали это? stackoverflow.com/questions/13649408/   -  person Vassilis Barzokas    schedule 15.12.2013
comment
Да спасибо. Это хорошо работает для загрузки зависимостей, но когда я удаляю пространство имен, phpspec не может найти мою спецификацию. И если я не удалю пространство имен, мое приложение не запустится.   -  person Bradley Trager    schedule 15.12.2013
comment
Если вы удаляете пространство имен в своем контроллере, оно больше не будет доступно в этом пространстве имен. Вы пытались удалить часть controllers\ вашего пространства имен внутри калькулятора и просто объявить его как калькулятор пространства имен? Затем изменить ожидание пространства имен phpspec, чтобы оно соответствовало?   -  person Zarathuztra    schedule 15.12.2013
comment
@Zarazthuztra, звучит многообещающе. Я был бы очень признателен, если бы вы могли опубликовать ответ с примером того, что вы имеете в виду. В частности, изменение ожидания пространства имен phpspec. Спасибо.   -  person Bradley Trager    schedule 16.12.2013


Ответы (1)


Внутри вашего теста контроллера вы сказали своему сопоставителю ожидать чего-то в пространстве имен:

controllers\Calculator;

Но проблема в том, что Calculator находится в пространстве имен Calculator с учетом вашего класса контроллера выше. Как это исправить? Просто добавьте это пространство имен в свой контроллер.

namespace controllers;

По сути, похоже, что вы удалили его, чтобы исправить одну вещь, а затем, как только вы это исправили, вы забыли вернуть его. Вы не сказали, что произойдет, если вы включите свой класс CI_Controller И используете контроллеры пространства имен. Калькулятор находится в глобальном пространстве, если вы не определили его как нечто другое, как указано выше, но вы ссылаетесь на него внутри другого пространства вне глобального в

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

Итак, что же произойдет, если вы добавите пространство имен обратно в свой контроллер калькулятора?

person Zarathuztra    schedule 16.12.2013
comment
Когда я снова добавляю пространство имен после ссылки на CI_Controller, он снова не может найти CI_CONTROLLER. - person Bradley Trager; 16.12.2013
comment
Обновление: я понял, что могу добавить пространство имен контроллеров и использовать расширения \CI_Controller (обратная косая черта означает использование глобального пространства имен), чтобы пройти тест, но это ломает мое приложение. Итак, моя настоящая проблема заключается в том, чтобы выяснить, как использовать CI с пространствами имен, которые не поддерживаются. см.: stackoverflow.com/questions/3700626/ и philsturgeon.co. Великобритания/блог/2012/12/. Другой вариант, который я бы предпочел на данный момент, — заставить phpspec работать без пространств имен. - person Bradley Trager; 16.12.2013
comment
@BradleyTrager хмммм, это должно было сработать. Я не очень много работаю с пространствами имен (все же я плохой человек), но я продолжу расследование для вас. просто голый со мной. Надеюсь, к вечеру у меня будет что-нибудь для вас, если это сработает? - person Zarathuztra; 16.12.2013
comment
В любое время абсолютно нормально, спасибо. Я ценю вашу помощь. - person Bradley Trager; 16.12.2013