Shopware Demo Plugin SwagTestExample: You have requested a non-existent service

Hallo,

bekommt Ihr auch den folgenden fehler wenn ihr  die Tests des Demo Plugins von shopware durch laufen lasst?

terminal command zum aktivieren in shopware: php ./bin/console sw:plugin:install --activate SwagTestExample

terminal command für die ausführung der tests: vendor/bin/phpunit -c /Applications/shopwareTDD/apps/shopware/htdocs/custom/plugins/SwagTestExample/

PHPUnit 5.7.14 by Sebastian Bergmann and contributors.

E. 2 / 2 (100%)

Time: 159 ms, Memory: 25.25MB

There was 1 error:

1) SwagTestExample\Tests\SwagExampleTest::testSomething
Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException: You have requested a non-existent service "swag_test_example.test_service".

/Applications/shopwareTDD/apps/shopware/htdocs/vendor/symfony/dependency-injection/Container.php:305
/Applications/shopwareTDD/apps/shopware/htdocs/engine/Shopware/Components/DependencyInjection/Container.php:217
/Applications/shopwareTDD/apps/shopware/htdocs/engine/Shopware/Components/DependencyInjection/Container.php:146
/Applications/shopwareTDD/apps/shopware/htdocs/custom/plugins/SwagTestExample/Tests/Functional/SwagExampleTest.php:14

ERRORS!
Tests: 2, Assertions: 3, Errors: 1.

Ich habe die folgende Anleitung genutzt: https://developers.shopware.com/developers-guide/plugin-testing/

Link zum Plugin: https://developers.shopware.com/exampleplugins/SwagTestExample.zip

Hallo - ich stehe gerade vor demselben Problem - gibt es dazu mittlerweile eine Lösung um das Plugin testen zu können.

Danke!

Hallo rtrau,

falls Du Shopware via Composer installiert hast, musst Du die Bootstrap für die UnitTests anpassen.

Mit folgender Bootstrap funktioniert es bei mir:

boot();

        $container = $kernel->getContainer();

        error_reporting(E_ERROR | E_PARSE);

        /** @var $repository \Shopware\Models\Shop\Repository */
        $repository = $container->get('models')->getRepository('Shopware\Models\Shop\Shop');

        $shop = $repository->getActiveDefault();
        $shop->registerResources();

        $_SERVER['HTTP_HOST'] = $shop->getHost();
    }

}

TestKernel::start();

 

1 „Gefällt mir“

Hallo zusammen,

ich habe genau das gleiche Problem mit meinem Plugin. Meine Bootstrap.php ist identisch mit der von @MrMDeluxe‍ aber ich bekomme auch den Fehler, dass der Service nicht existent ist:

12) KreativrudelSwagConnector\Tests\Functional\Components\TokenServiceTest::should_throw_an_error_when_the_json_is_malformed
Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException: You have requested a non-existent service "kreativrudel_swag_connector.token_service".

/var/www/html/shop/vendor/symfony/dependency-injection/Container.php:348
/var/www/html/shop/vendor/shopware/shopware/engine/Shopware/Components/DependencyInjection/Container.php:211
/var/www/html/shop/vendor/shopware/shopware/engine/Shopware/Components/DependencyInjection/Container.php:143
/var/www/html/shop/custom/plugins/KreativrudelSwagConnector/Traits/GuzzleClient.php:45
/var/www/html/shop/custom/plugins/KreativrudelSwagConnector/Components/Dispatcher.php:16
/var/www/html/shop/custom/plugins/KreativrudelSwagConnector/Components/TokenService.php:49
/var/www/html/shop/custom/plugins/KreativrudelSwagConnector/Tests/Functional/Components/TokenServiceTest.php:33

Ein Auszug aus meiner services.xml:

    ...

        
            
        

        ...

Beim aufruf über den Browser ist das alles kein Problem. Ansonsten laufen auch alle anderen Tests (Funktional sowie Unit). Nur bei denen meine eigenen Services über den DI Container injected werden schlagen fehl. Mein Plugin habe ich auch mehrmals deaktiviert, deinsalliert, wieder aktiviert und installiert sowie alle caches geleert.

Vielleicht hat jemand noch einen Tipp.

Shopware 5.5.4 - /dev
PHP 7.2.4 FPM
PHPUnit 7.5.3

Viele Grüße
Miron

Hab es jetzt zum laufen gebracht in dem ich im Testkernel explizit die services.xml im TestKernel lade:

...

protected function prepareContainer(ContainerBuilder $container) {
        $loader = new XmlFileLoader($container, new FileLocator('/var/www/html/plugins/KreativrudelSwagConnector/Resources'));
        $loader->load('services.xml');

        return parent::prepareContainer($container);
    }

...

Muss evtl. die Doku unter Plugin testing angepasst werden? Oder gibt es evtl. einen eleganteren Weg ohne meinen Workaround ?

 

Viele Grüße
Miron