file_put_contents в vfsstream вызывает ошибку `не удалось открыть поток:`

Я хочу написать UnitTests, издеваясь над файловой системой с помощью vfs.

Мой тест выглядит так:

<?php
use org\bovigo\vfs\vfsStreamContent;
use PHPUnit\Framework\TestCase;
use org\bovigo\vfs\vfsStream;


class MyClassTest extends TestCase {

    private $vfs;

    function setUp() {

        ini_set("allow_url_fopen", true);
        $this->vfs = vfsStream::setup('root', 777);
        $sampledataDir = vfsStream::newDirectory('sampledata', 777)->at($this->vfs);
        vfsStream::copyFromFileSystem(realpath(__DIR__ . '/../sampledata'), $sampledataDir);
        $dataDir = vfsStream::newDirectory('data', 777)->at($this->vfs);
    }


    function tearDown() {

        unset($this->vfs);
    }


    function testSetup() {

        file_put_contents($this->vfs->url() . "/data/newFile.html", "stuff");
    }

}

Команда file_put_contents вставлена ​​сюда в качестве образца, она должна исходить из класса, который я хочу протестировать. К сожалению, я получаю сообщение об ошибке:

file_put_contents(vfs://root/data/newFile.html): failed to open stream: "org\bovigo\vfs\vfsStreamWrapper::stream_open" call failed

Зачем? Что я делаю не так?


Из composer.json

  "require-dev": {
    "mikey179/vfsstream": "^1.6",
    "phpunit/phpunit":  "^6.5.0"
  }

дополнительная информация:

php --version
PHP 7.3.11-1~deb10u1 (cli) (built: Oct 26 2019 14:14:18) ( NTS )

1 ответ

Решение

Я сам нашел: я сохранил неправильный URL, забыв корневой каталог.

изменение его на добилось цели. Иногда самые банальные вещи оказываются самыми отвратительными.


file_put_contents($this->vfs->url() . "/root/data/newFile.html", "stuff");
Другие вопросы по тегам