Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Codeception
Форумы портала PHP.SU » » Вопросы новичков » Codeception

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

1. psevdo - 12 Октября, 2017 - 12:33:36 - перейти к сообщению
Здравствуйте. Проконсультируйте меня пожалуйста.
Пытаюсь освоить 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.  
2. andrewkard - 12 Октября, 2017 - 13:41:25 - перейти к сообщению
psevdo пишет:
public function testCreate() {

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

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

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

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


Спасибо за комментарий. Но моя цель сейчас просто разобраться с codeception. Поэтому написал самый простой тест. А он выдает ошибку, что не может найти класс. Поэтому и прошу помощи разобраться.
4. andrewkard - 12 Октября, 2017 - 14:41:40 - перейти к сообщению
Пробуем примерно так:
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.  
5. psevdo - 12 Октября, 2017 - 14:54:03 - перейти к сообщению
Повторюсь, я хочу запустить тест моего модуля. Т.е. 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, который находится в корне проекта. Как тогда подцепить такой же файл в корне модуля?
6. LIME - 12 Октября, 2017 - 14:59:23 - перейти к сообщению
может autoload для require-dev не прописан?
7. psevdo - 12 Октября, 2017 - 15:03:06 - перейти к сообщению
LIME пишет:
может autoload для require-dev не прописан?


а где, как и куда его прописывать?
8. andrewkard - 12 Октября, 2017 - 15:14:30 - перейти к сообщению
поскольку Вы определили,
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.  
9. psevdo - 12 Октября, 2017 - 15:18:33 - перейти к сообщению
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.  


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

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

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

так?
11. psevdo - 12 Октября, 2017 - 15:34:11 - перейти к сообщению
andrewkard пишет:
psevdo пишет:
Изначально так и было. Класс не находился

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

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

так?


Верно. Файл расположен верно.
12. andrewkard - 12 Октября, 2017 - 15:38:50 - перейти к сообщению
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.  

и запустили?
13. psevdo - 12 Октября, 2017 - 15:41:10 - перейти к сообщению
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 и руками прописывал путь.
14. LIME - 12 Октября, 2017 - 16:02:36 - перейти к сообщению
psevdo в composer посмотри
(Добавление)
да в конце концов свой spl_autoload добавь в кодесепшн
в bootstrap.php
15. andrewkard - 12 Октября, 2017 - 17:22:14 - перейти к сообщению
Вроде все правильно, но не взлетает, тогда посоветую поставить какой то модуль с гит хаба и посмотреть как там организованы тесты и сделать аналогично

 

Powered by ExBB FM 1.0 RC1