PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
psevdo
Отправлено: 12 Октября, 2017 - 12:33:36
Post Id



Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Здравствуйте. Проконсультируйте меня пожалуйста.
Пытаюсь освоить codeception.
Есть у меня проект на Yii2.
Есть модуль modules\sh. Там такая структура:
modules
-- sh
---- Module.php
---- controllers
---- modules
---- views
---- entities
------ hobby
-------- Hobby.php
---- codeception.yml
---- tests
------ unit
-------- entities
---------- hobby
------------ HobbyTest.php

Содержимое класса HobbyTest.php:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. namespace app\modules\sh\tests\unit\entities\hobby;
  4.  
  5. use app\modules\sh\entities\hobby\Hobby;
  6. use Codeception\Test\Unit;
  7.  
  8. class HobbyTest extends Unit {
  9.         /**
  10.          * @var \UnitTester
  11.          */
  12.         protected $tester;
  13.  
  14.         protected $id = 5;
  15.         protected $title = 'test';
  16.         protected $sex = 'male';
  17.         protected $sort = 1;
  18.  
  19.         protected function _before() {
  20.         }
  21.  
  22.         protected function _after() {
  23.         }
  24.  
  25.         // tests
  26.         public function testCreate() {
  27.                 $hobby = new \app\modules\sh\entities\hobby\Hobby(
  28.                         $this->id,
  29.                         $this->title,
  30.                         $this->sex,
  31.                         $this->sort
  32.                  );
  33.                
  34.                  $this->assertEquals($this->id, $hobby->getId());
  35.                  $this->assertEquals($this->title, $hobby->getTitle());
  36.                  $this->assertEquals($this->sex, $hobby->getSex());
  37.                  $this->assertEquals($this->sort, $hobby->getSort());
  38.         }
  39. }


Суть в том, что когда я в консоли набираю команду (нахожусь при этом в корне проекта Yii):
Цитата:
vendor\bin\codecept -c modules\sh


Цитата:
1) [35;1mHobbyTest:[39;22m Create
[37;41;1m Test [39;49;22m tests\unit\entities\hobby\HobbyTest.php:testCreate
[37;41;1m [39;49;22m
[37;41;1m [Error] Class 'app\modules\sh\entities\hobby\Hobby' not found [39;49;22m
[37;41;1m [39;49;22m
#1 C:\Users\Psevdo\PhpstormProjects\sh\modules\sh\tests\unit\entities\hobby\HobbyTest.php:41
#2 app\modules\sh\tests\unit\entities\hobby\HobbyTest->testCreate


Т.е. класс Hobby не найден. Хотя он есть.

codeception.yml в корне проекта:
CODE (htmlphp):
скопировать код в буфер обмена
  1. actor: Tester
  2. paths:
  3.     tests: tests
  4.     log: tests/_output
  5.     data: tests/_data
  6.     helpers: tests/_support
  7. settings:
  8.     bootstrap: _bootstrap.php
  9.     memory_limit: 1024M
  10.     colors: true
  11. modules:
  12.     config:
  13.         Yii2:
  14.             configFile: 'config/test.php'
  15.             cleanup: false


codeception.yml в корне модуля sh:
CODE (htmlphp):
скопировать код в буфер обмена
  1. paths:
  2.     tests: tests
  3.     output: tests/_output
  4.     data: tests/_data
  5.     support: tests/_support
  6.     envs: tests/_envs
  7. actor_suffix: Tester
  8. settings:
  9.     bootstrap: _bootstrap.php
  10.     memory_limit: 1024M
  11.     colors: true
  12. extensions:
  13.     enabled:
  14.         - Codeception\Extension\RunFailed
  15.  
 
 Top
andrewkard
Отправлено: 12 Октября, 2017 - 13:41:25
Post Id


Участник


Покинул форум
Сообщений всего: 1030
Дата рег-ции: Нояб. 2014  


Помог: 19 раз(а)




psevdo пишет:
public function testCreate() {

странный тест у Вас, что Вы проверяете?
посмотрите примеры тестов в коде, и вот еще неплохая статья
https://ru[dot]stackoverflow[dot]com/que[dot][dot][dot]d0%bd%d0%b0-yii2

если Вы тестируете создание модели, не думаю что от этого есть какой то толк,
т.е. new Model()
создали и что?
а вот наполнить, провалидировать и сохранить уже имеет смысл.
 
 Top
psevdo
Отправлено: 12 Октября, 2017 - 14:08:26
Post Id



Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




andrewkard пишет:
psevdo пишет:
public function testCreate() {

странный тест у Вас, что Вы проверяете?
посмотрите примеры тестов в коде, и вот еще неплохая статья
https://ru[dot]stackoverflow[dot]com/que[dot][dot][dot]d0%bd%d0%b0-yii2

если Вы тестируете создание модели, не думаю что от этого есть какой то толк,
т.е. new Model()
создали и что?
а вот наполнить, провалидировать и сохранить уже имеет смысл.


Спасибо за комментарий. Но моя цель сейчас просто разобраться с codeception. Поэтому написал самый простой тест. А он выдает ошибку, что не может найти класс. Поэтому и прошу помощи разобраться.
 
 Top
andrewkard
Отправлено: 12 Октября, 2017 - 14:41:40
Post Id


Участник


Покинул форум
Сообщений всего: 1030
Дата рег-ции: Нояб. 2014  


Помог: 19 раз(а)




Пробуем примерно так:
PHP:
скопировать код в буфер обмена
  1.  
  2. namespace tests\codeception\unit\models;
  3.  
  4. use app\models\SignupForm;
  5. use app\models\User;
  6. use Yii;
  7. use yii\codeception\TestCase;
  8. use Codeception\Specify;
  9.  
  10. class SignUpFormTest extends TestCase
  11. {
  12.     use Specify;
  13.  
  14.  
  15.     public function testLoginSignUpEmptyForm()
  16.     {
  17.         $model = new SignupForm([
  18.             'username' => '',
  19.             'email' => '',
  20.             'phone' => '',
  21.             'name' => '',
  22.             'password' => '',
  23.         ]);
  24.  
  25.         $this->specify('user should not be sign up', function () use ($model) {
  26.             expect('empty form', $model->signup())->null();
  27.         });
  28.     }
  29.  
  30.  
 
 Top
psevdo
Отправлено: 12 Октября, 2017 - 14:54:03
Post Id



Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Повторюсь, я хочу запустить тест моего модуля. Т.е. namespace там такой - namespace app\modules\sh\tests\unit\entities\hobby.
Запускать тесты модуля... Такое ведь возможно? В этом ведь нет ничего криминального.
А запускать пытаюсь командой vendor\bin\codecept run unit -c modules\sh. Опция -c нужна для того, чтобы codeception брал codeception.yml не из корня проекта, а из корня самого модуля.

Или правильнее запускать командой vendor\bin\codecept run unit? Но в таком случае будет подхватываться только codeception.yml, который находится в корне проекта. Как тогда подцепить такой же файл в корне модуля?
 
 Top
LIME
Отправлено: 12 Октября, 2017 - 14:59:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 9957
Дата рег-ции: Нояб. 2010  


Помог: 294 раз(а)




может autoload для require-dev не прописан?


-----
вау
я кажется понял жастЮзера!!!
 
 Top
psevdo
Отправлено: 12 Октября, 2017 - 15:03:06
Post Id



Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




LIME пишет:
может autoload для require-dev не прописан?


а где, как и куда его прописывать?
 
 Top
andrewkard
Отправлено: 12 Октября, 2017 - 15:14:30
Post Id


Участник


Покинул форум
Сообщений всего: 1030
Дата рег-ции: Нояб. 2014  


Помог: 19 раз(а)




поскольку Вы определили,
psevdo пишет:
use app\modules\sh\entities\hobby\Hobby;

то так
PHP:
скопировать код в буфер обмена
  1.  
  2. $hobby = new Hobby(
  3.                         $this->id,
  4.                         $this->title,
  5.                         $this->sex,
  6.                         $this->sort
  7.                  );
  8.  

(Отредактировано автором: 12 Октября, 2017 - 15:17:17)

 
 Top
psevdo
Отправлено: 12 Октября, 2017 - 15:18:33
Post Id



Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




andrewkard пишет:
psevdo пишет:
$hobby = new \app\modules\sh\entities\hobby\Hobby(
$this->id,
$this->title,
$this->sex,
$this->sort
);


попробуйте убрать
(Добавление)
и поскольку Вы определили,
psevdo пишет:
use app\modules\sh\entities\hobby\Hobby;

то так
PHP:
скопировать код в буфер обмена
  1.  
  2. $hobby = new Hobby(
  3.                         $this->id,
  4.                         $this->title,
  5.                         $this->sex,
  6.                         $this->sort
  7.                  );
  8.  


Изначально так и было. Класс не находился. Потом я попробовал в вызове класса прописать путь руками. Если не вызывать этот класс, то соответственно тест выполняется без ошибок.
 
 Top
andrewkard
Отправлено: 12 Октября, 2017 - 15:27:11
Post Id


Участник


Покинул форум
Сообщений всего: 1030
Дата рег-ции: Нояб. 2014  


Помог: 19 раз(а)




psevdo пишет:
Изначально так и было. Класс не находился

что то с неймспейсом

namespace modules\sh\tests\unit\entities\hobby;

так?
 
 Top
psevdo
Отправлено: 12 Октября, 2017 - 15:34:11
Post Id



Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




andrewkard пишет:
psevdo пишет:
Изначально так и было. Класс не находился

что то с неймспейсом

namespace modules\sh\tests\unit\entities\hobby;

так?


Верно. Файл расположен верно.
 
 Top
andrewkard
Отправлено: 12 Октября, 2017 - 15:38:50
Post Id


Участник


Покинул форум
Сообщений всего: 1030
Дата рег-ции: Нояб. 2014  


Помог: 19 раз(а)




psevdo пишет:
Верно.

?
поставили этот неймспейс
modules\sh\tests\unit\entities\hobby;
и
PHP:
скопировать код в буфер обмена
  1.  
  2. $hobby = new Hobby(
  3.                         $this->id,
  4.                         $this->title,
  5.                         $this->sex,
  6.                         $this->sort
  7.                  );
  8.  

и запустили?
 
 Top
psevdo
Отправлено: 12 Октября, 2017 - 15:41:10
Post Id



Гость


Покинул форум
Сообщений всего: 95
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




andrewkard пишет:
psevdo пишет:
Верно.

?
поставили этот неймспейс
modules\sh\tests\unit\entities\hobby;
и
PHP:
скопировать код в буфер обмена
  1.  
  2. $hobby = new Hobby(
  3.                         $this->id,
  4.                         $this->title,
  5.                         $this->sex,
  6.                         $this->sort
  7.                  );
  8.  

и запустили?


Пробовал и через use и руками прописывал путь.
 
 Top
LIME
Отправлено: 12 Октября, 2017 - 16:02:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 9957
Дата рег-ции: Нояб. 2010  


Помог: 294 раз(а)




psevdo в composer посмотри
(Добавление)
да в конце концов свой spl_autoload добавь в кодесепшн
в bootstrap.php


-----
вау
я кажется понял жастЮзера!!!
 
 Top
andrewkard
Отправлено: 12 Октября, 2017 - 17:22:14
Post Id


Участник


Покинул форум
Сообщений всего: 1030
Дата рег-ции: Нояб. 2014  


Помог: 19 раз(а)




Вроде все правильно, но не взлетает, тогда посоветую поставить какой то модуль с гит хаба и посмотреть как там организованы тесты и сделать аналогично
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB