【发布时间】:2019-12-16 03:52:01
【问题描述】:
在我的应用程序中,用户可以上传文件,其他用户可以下载它们。作为控制器集成测试的一部分,我将几个测试文件移动到上传目录中,以便测试下载操作。
移动setUp() 中的文件并在teardown() 中删除它们是有效的,只要我不接触测试中的文件。当测试返回文件时,tearDown() 无法删除它们,我收到错误消息:
警告错误:取消链接(C:\xampp\htdocs\2deal\keys_test\1_open.key):资源暂时不可用
我该如何解决这个问题?
- 我尝试打开和关闭
tearDown()中的文件,但没有效果。有趣的是,fopen()函数成功了,所以文件实际上并没有被锁定。 - 我还发现了这个similar question,解决方案是使用文件删除对象。所以我在
tearDown()的顶部添加了unset($this->_response);,但再次无济于事。 - 我尝试添加
sleep(10);添加tearDown()的开头,这也没有任何区别。所以这不是时间问题。
整个测试文件如下所示:
/**
* setUp method before each test
*/
public function setUp()
{
Configure::write('Keys.path', 'keys_test');
// Config writing must happen before parent::setUp()
parent::setUp();
$files = [
'1_open.key',
'1_close.key',
'2_open.key',
'2_close.key'
];
foreach ($files as $file)
{
copy(self::SOURCE_DIR . $file, ROOT . DS . Configure::read('Keys.path') . DS . $file);
}
}
/**
* tearDown method after each test
*/
public function tearDown()
{
parent::tearDown();
// Clear test upload directory
$files = glob(ROOT . DS . Configure::read('Keys.path') . DS . '*');
foreach ($files as $file)
{
if (is_file($file))
{
\unlink($file); // Delete file
}
}
}
/**
* Test getFile method
*
* @return void
*/
public function testGetFile()
{
$this->get('/carkeys/get-file/1/open.json');
$file = $this->_response->getFile();
$real_file = self::SOURCE_DIR . '1_open.key';
$this->assertResponseOk();
$this->assertFileEquals($file->path, $real_file);
}
【问题讨论】:
标签: cakephp phpunit cakephp-3.0 unlink