/** * @test */ public function getCachedItemWaitsForCacheCreationWhenCacheIsUnderConstruction() { $storage = $this->mockWithPhpUnit(); $storage->expects($this->at(0))->method('hasItem')->with('foo')->will($this->returnValue(false)); $storage->expects($this->at(1))->method('hasItem')->with($this->delayedKey)->will($this->returnValue(true)); $storage->expects($this->at(2))->method('hasItem')->with($this->delayedKey)->will($this->returnValue(true)); $storage->expects($this->at(3))->method('hasItem')->with($this->delayedKey)->will($this->returnValue(false)); $storage->expects($this->once())->method('getItem')->with('foo')->will($this->returnValue('bar')); $return = $this->cache->getCachedItem('foo', function () { return 'baz'; }); $this->waiter->wait(1)->shouldHaveBeenCalled(); $this->assertEquals('bar', $return); }