передать данные в качестве параметра к действию в тестовом примере cakeStack Overflow

я хочу протестировать функцию контроллера getStructuredChartData, которая принимает $ chartData в качестве параметра

function getStructuredChartData($chartData = null) {
$structuredChartData = array();
$structuredChartData['Create'] = array();
$structuredChartData['Create']['type'] = 'column';
$structuredChartData['Create']['exportingEnabled'] = TRUE;

if($chartData == null) {
$structuredChartData['null'] = TRUE;
} else {
$structuredChartData['ChartParams'] = array();
$structuredChartData['ChartParams']['renderTo'] = 'columnwrapper';
....
....
....
}
}

и чтобы проверить это код, который я написал в тестовом контроллере, выглядит следующим образом

public function testTrendsReportWithAjaxRequest() {
$chartData = array();
$from_date = new DateTime("2014-07-01");
$to_date = new DateTime("2014-07-31");
$chartData['StartDate'] = $from_date;
$chartData['EndDate'] = $to_date;
$chartData['View'] = "Daily";
$chartData['Data'][(int) 0]['Project']['name'] = 'Test Project #1';
$chartData['Data'][(int) 0][(int) 0] = array('reviewed' => '1', 'modified' => '2014-07-16');
debug($chartData);
// Invoke the index action.
$result = $this->testAction(
'/reports/getStructuredChartData',
array('data' => $chartData)
);

debug($result);
$this->assertNotEmpty($result);
}

Теперь меня беспокоит то, как передать $ chartData в функцию контроллера в testCase.

В настоящее время в функции контроллера $ chartData имеет значение NULL и условие if

        if($chartData == null) {
$structuredChartData['null'] = TRUE;
}

исполняется. Более того, я хотел бы еще условие

        else {
$structuredChartData['ChartParams'] = array();
$structuredChartData['ChartParams']['renderTo'] = 'columnwrapper';
....
....
....
}

быть выполненным.

0

Решение

От Документация по тестированию CakePHP

Предоставляя ключ данных, запрос к контроллеру будет POST. По умолчанию все запросы будут POST-запросами. Вы можете смоделировать запрос GET, установив ключ метода:

Вы должны добавить метод get as:

 $result = $this->testAction(
'/reports/getStructuredChartData',
array('data' => $chartData, 'method' => 'get')
);

Если у вас правильно настроены маршруты, вы можете просто передать полный URL:

 $result = $this->testAction(
'/reports/getStructuredChartData/test'
);

Опять из CakePHP документы

// routes.php
Router::connect(
'/reports/getStructuredData/:chartData',
array('controller' => 'reports', 'action' => 'getStructuredData'),
array(
'pass' => array('chartData'),
)
);
3

Другие решения

Чтобы передать $ chartData в качестве аргумента в TestCaseController, я сделал следующее:

        $this->controller = new ReportsController();
$result = $this->controller->getStructuredChartData($chartData);
1