n98 / magerun2-test-framework
n98-magerun2 命令的测试框架
2.0.2
2022-02-24 11:07 UTC
Requires
- php: >=7.3
Requires (Dev)
- mikey179/vfsstream: ^1.6
- phpunit/phpunit: ^9
README
此包包含一些PHPUnit测试用例。
先决条件
测试运行器需要一个纯净的Magento 2安装。要运行测试套件,需要设置环境变量 N98_MAGERUN2_TEST_MAGENTO_ROOT,其值为安装的根路径。
所有单元测试都是针对此安装运行的。请勿使用任何生产环境!
测试模块命令
示例测试用例
<?php namespace Acme\Example\Command; use N98\Magento\Command\PHPUnit\TestCase; use Symfony\Component\Console\Tester\CommandTester; class FooCommandTest extends TestCase { /** * @test */ public function testOutput() { /** * Load module config for unit test. In this case the relative * path from current test case. */ $this->loadConfigFile(__DIR__ . '/../../n98-magerun2.yaml'); /** * Test if command could be found */ $command = $this->getApplication()->find('foo'); /** * Call command */ $commandTester = new CommandTester($command); $commandTester->execute( [ ] ); } }
测试 dev:console 命令
代码生成命令
创建一个包含代码生成器内容的参考文件。在以下测试用例中,文件位于 "DIR /_files/ExampleSomething.php"。
TestCase 类中的 mockWriterFileWriteFileAssertion 方法模拟模块编写者,并将输出与参考文件进行比较。
<?php namespace Acme\Example\Command\CodeGenerator; use N98\Magento\Command\Developer\Console\PHPUnit\TestCase; class MakeSomethingCommandTest extends TestCase { /** * @test */ public function testGenerator() { $command = new MakeSomethingCommand(); $commandTester = $this->createCommandTester($command); $command->setCurrentModuleName('Acme_Example'); $writerMock = $this->mockWriterFileWriteFileAssertion( __DIR__ . '/_files/ExampleSomething.php' ); $command->setCurrentModuleDirectoryWriter($writerMock); $commandTester->execute([ /* pass your parameters */ ]); } }
运行PHPUnit测试
N98_MAGERUN2_TEST_MAGENTO_ROOT=/path/to/magento/root ./vendor/bin/phpunit
示例PHPUnit配置
示例模块结构
.
├── README.md
├── composer.json
├── n98-magerun2.yaml
├── phpunit.xml.dist
├── src
│ └── Command
│ └── ExampleCommand.php
└── tests
└── Command
└── ExampleCommandTest.php
phpunit.xml.dist
<?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bootstrap="vendor/autoload.php" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"> <coverage includeUncoveredFiles="true"> <include> <directory>src</directory> </include> </coverage> <testsuites> <testsuite name="n98-magerun2 Project Transfer Tools Commands"> <directory>tests</directory> </testsuite> </testsuites> </phpunit>
composer.json
{
"name": "acme/example",
"description": "Some commands",
"require-dev": {
"n98/magerun2": "^4",
"n98/magerun2-test-framework": "^2",
"phpunit/phpunit": "^9"
},
"autoload-dev": {
"psr-4": {
"Acme\\Example\\": "tests"
}
},
"autoload": {
"psr-4": {
"Acme\\Example\\": "src"
}
}
}