Я работаю с 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
}
}
]
Это то, что происходит в командной строке