Test CachingLoader – invalidace cache

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
greeny
Člen | 405
+
0
-

Ahoj, mám třídu CachingLoader a v ní tuto metodu, kterou chci otestovat:

	/**
	 * @param string $path
	 * @return mixed
	 */
	public function load($path)
	{
		if (!file_exists($path)) {
			throw new FileNotFoundException("File '$path' not found.");
		}

		return $this->cache->load($path, function (&$dependencies) use ($path) {
			$dependencies[Cache::FILES] = $path;
			return Neon::decode(file_get_contents($path));
		});
	}

Bohužel mi neprochází testy z nějakého neznámého důvodu. Zde je můj test:

$storage = new MemoryStorage;
$cache = new Cache($storage);
$loader = new CachingLoader($storage);

$path = __DIR__ . '/../../../assets/config.neon';
$config = [
	'a' => 'a',
	'b' => [
		'a',
		'b',
		'c',
	]
];

@unlink($path);
file_put_contents($path, Neon::encode($config));

Assert::null($cache->load($path));
Assert::same($config, $loader->load($path));
Assert::same($config, $cache->load($path));

$config['c'] = 'c';
file_put_contents($path, Neon::encode($config)); // modify cached file

Assert::null($cache->load($path));

Na posledním assertu mi to hlásí, že $cache->load($path) je stále pole. Netuším proč se ta cache neinvaliduje, netuší někdo?

Editoval greeny (26. 9. 2015 9:23)

jiri.pudil
Nette Blogger | 1029
+
0
-

imo proto, že MemoryStorage s dependencies vůbec nepočítá a nepracuje

greeny
Člen | 405
+
0
-

Ajo, to by mohlo být ono :) díky moc :)

greeny
Člen | 405
+
0
-

Nahradil jsem MemoryStorage za FileStorage a stále to nefunguje :( vůbec netuším čím to je :(

Milo
Nette Core | 1283
+
0
-

Because you are too fast, mtime does not change. Moreover, mtime is cached by PHP. Try:

sleep(1);
clearstatcache();

before putting new content in.

EDIT: Sorry, blbě se přepíná do češtiny když všichni kolem mluví anglicky :o)

greeny
Člen | 405
+
0
-

Vyzkouším, díky :) (a anglicky ještě rozumím :D )