Codeception печатает переменную метода Acceptance Cest - PullRequest
0 голосов
/ 16 ноября 2018

Я работаю с Drupal 8 и мне нужно проверить, имеют ли клиенты (Владельцы продукта) правильные права на создание, обновление и удаление типов контента.

Сначала я сделал это, написав отдельный Acceptance Cest длякаждый тип контента, который мне нужно было проверить.Однако это стало очень утомительным и очень быстрым.

Вот почему я решил написать Acceptance Cest, который извлекает предопределенные типы контента из файла JSON, затем проверяет, какое право должно быть в наличии для этого типа контента, а затем,следуя этим правам, проверяет, действительно ли пользователь менеджера контента может выполнить это действие (или не может в случае, если он не может выполнить действие).Он делает это для всех типов контента, определенных в файле JSON.

Это прекрасно работает, и я очень рад, что это стало возможным благодаря использованию аннотации @dataProvider.

Однако есть одна вещь, которой я недоволен, и это тот факт, что Codeception, похоже, печатает значения типа контента, который он зацикливает, в командной строке.

Странная вещьтем не менее, он перезаписывает то, что уже видно в командной строке, текстом из моего вызова метода $I->wantTo();.

Можно ли как-то запретить Codeception печатать значения типа содержимого в командной строке?Если нет, то почему это происходит, потому что я не совсем понимаю, что является причиной этого.

Я предоставил код метода, который перебирает типы контента и тестирует их, код метода, которыйизвлекает данные из файла JSON и сам файл JSON.Также будет GIF, что происходит в командной строке, когда я запускаю тест на визуализацию.

Я надеюсь, что с этим я предоставил достаточно информации.Если потребуется больше, я с радостью предоставлю.

//This method checks if the rights to create a content type are in place correctly
/**
* @param AcceptanceTester $I
* @dataProvider typeProvider
*/
public function CmUserCreateRight(AcceptanceTester $I, \Codeception\Example $contentType)
{
    $objective = sprintf("see that the CM user " . ($contentType['rights']['create'] ? 'can' : 'cannot') . " create a %s", $contentType['realname']);

    $I->wantTo($objective);
    $I->amOnPage('/node/add');
    $I->seeResponseCodeIs(200);

    //The rights are defined as either true or false, this checks which is defined and tests accordingly.
    if ($contentType['rights']['create']) {
        $I->seeLink(sprintf('%s', $contentType['realname']), sprintf('/node/add/%s', $contentType['urlname']));
    } else {
        $I->dontSeeLink(sprintf('%s', $contentType['realname']), sprintf('/node/add/%s', $contentType['urlname']));
    }
}

Как вы можете видеть, «TypeProvider» используется в качестве dataProvider.Этот метод находится в том же классе, что и метод выше.

 /**
 * @return array
 */
protected function typeProvider()
{
    $TH = new TypeHelper();
    return $TH->getTypes();
}

Метод TypeProvider выполняет вызов класса «ContentTypes» (здесь я использовал его как «TypeHelper»), который извлекает данные JSON.

class ContentTypes {

    private $contentTypes = [];

    public function __construct()
    {
        $this->contentTypes = $this->getConfig();
    }

    private function getConfig() {
        $json = file_get_contents('tests/_data/contenttypes.json');
        return json_decode($json, true);
    }

    public function getTypes() {
        return $this->contentTypes;
    }
}

Наконец, этот класс извлекает данные JSON и возвращает их исходному методу в виде \Codeception\Example для использования в Cest.

JSON-файл:

[
    {
        "urlname": "configuratie_pagina",
        "realname": "Configuratie pagina",
        "rights": {
            "create": false,
            "update": true,
            "delete": false
        }
    },   

   {
       "urlname": "content",
       "realname": "Contentpagina",
       "rights": {
           "create": true,
           "update": true,
           "delete": true
        }
    }
]

Это то, что происходит в командной строке

...