CakePHP IntegrationTestTrait,测试文件上传
CakePHP IntegrationTestTrait, Testing File Upload
我已经卡在这个问题上好几天了!我正在尝试测试一个控制器函数,该函数读取在 $_FILES 中上传的文件并设置一个包含 error/success 消息的变量。
我知道 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 cannot read stream" 错误。但是,当我将 name
更改为不正确的文件名时,输出似乎没有差异。
有谁知道我该如何进一步调试它?
我知道出了什么问题。事实证明我没有验证自己。
我添加了身份验证令牌并加载了固定装置:
public funciton setUp() {
// Configure Authentication
$this->session([
'Auth' => [
'User' => [
'id' => 21896, /* Insert Test User Info */
'is_admin' => false /* Insert Test User Info */
]
]
]);
// Load Fixtures necessary for User authentication
$this->loadFixtures('Users', 'Permissions');
我已经卡在这个问题上好几天了!我正在尝试测试一个控制器函数,该函数读取在 $_FILES 中上传的文件并设置一个包含 error/success 消息的变量。
我知道 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 cannot read stream" 错误。但是,当我将 name
更改为不正确的文件名时,输出似乎没有差异。
有谁知道我该如何进一步调试它?
我知道出了什么问题。事实证明我没有验证自己。
我添加了身份验证令牌并加载了固定装置:
public funciton setUp() {
// Configure Authentication
$this->session([
'Auth' => [
'User' => [
'id' => 21896, /* Insert Test User Info */
'is_admin' => false /* Insert Test User Info */
]
]
]);
// Load Fixtures necessary for User authentication
$this->loadFixtures('Users', 'Permissions');