Я застрял на этом в течение нескольких дней! Я пытаюсь протестировать функцию контроллера, которая читает файл, загруженный в $ _FILES, и устанавливает переменную, содержащую сообщения об ошибках / успехах.
Я знаю, что CakePHP IntegrationTestTrait фактически не отправляет HTTP-запрос, однако я нашел поток кого-то, утверждающего, что он может его обойти:
Я попытался реализовать следующее решение, которое нашел здесь: https://discourse.cakephp.org/t/unit-testing-of-file-uploads-solved/5241
Но проблема все еще сохраняется.
Controller/StudentsController.php
public function import() {
if ($this->request->is('post')) {
.
.
.
$import = $this->Students->import($this->request->getData('CsvFile.tmp_name'));
if (! empty($import['errors'])) {
$this->Flash->error($error);
} else {
$this->set('import', $import);
}
}
}
Вот мой тестовый пример с использованием IntegrationTestTrait.
public function testImport() {
// Append a bad file (wrong type) by spoofing PHP's files array
$_FILES = [
'CsvFile' => [
'name' => 'student-import-test-1.csv',
'type' => 'text/csv',
'tmp_name' => 'tests/Fixture/csv/',
'error' => 0,
'size' => 258
]
];
$data = [
'CsvFile.name' => 'student-import-test-1.csv',
'CsvFile.type' => 'text/csv',
'CsvFile.tmp_name' => 'tests/Fixture/csv/',
'CsvFile.error' => 0,
'CsvFile.size' => 258
];
$this->post('/students/import', $data);
$this->assertResponseOk();
$this->assertFlashElement('Flash/error');
$_FILES = [];
}
Сбой $this->assertResponseOk()
, потому что, Failed asserting that 302 is between 200 and 204.
Однако, $this->assertFlashElement('Flash/error')
успешен.
Я новичок в тестировании на CakePHP. Я застрял на отладке этой проблемы. Я полагаю, что есть пара вещей, которые могут сделать этот
файл tmp_name
/, возможно, недоступным. Я попытался изменить tmp_name
на неверный путь, и я получаю сообщение об ошибке «PSD не может прочитать поток». Однако, когда я изменяю name
на неверное имя файла, кажется, что нет разницы в выводе.
Кто-нибудь знает, как я могу отладить это дальше?