我遇到了无法运行测试用例的问题。我有一个 laravel 项目,我在其中编写了测试用例并尝试从我的 homestead 服务器运行。但它显示错误。
“供应商/bin/phpunit:第1行:../phpunit/phpunit/phpunit:没有这样的文件或目录”
我的供应商文件中有 phpunit 。
其他人也遇到过这样的问题,为什么会出现此错误?
等待回复..
这个错误困扰着我。我的 laravel 版本是 5.6 我认为我没有对 phpunit.xml 文件进行任何更改,除了这些
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="MAIL_DRIVER" value="array"/>
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
</php>
Run Code Online (Sandbox Code Playgroud)
我正在写这样的测试:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class DemoTest extends TestCase
{
use DatabaseMigrations;
public function test_it_is_nothing()
{
$this->get('/volunteers')->assertStatus('200');
}
}
Run Code Online (Sandbox Code Playgroud)
我还参考了这篇文章Laravel 多个数据库 PHPUnit但没有帮助。
变量$this->id在另一个函数中不可见testExemple
如果我将此变量传递给不在 \xe2\x80\x9ctest\xe2\x80\x9d 上启动的普通函数,而不是测试函数,则一切都会正常。
\n\n我能以某种方式解决这个问题吗?
\n\nclass LoginTest extends TestCase\n{\n protected $id;\n public function testLogin()\n {\n $response = $this->json('post', 'auth/login', \n ['email' => 'admin@mail.com', 'password' => '12345678'])\n ->assertJsonStructure(['data' => ['id', 'name', 'email']]);\n\n $response->assertStatus(201);\n\n $userData = $response->getContent();\n $userData = json_decode($userData, true);\n $this->id = $userData['data']['id'];\n }\n public function testExemple()\n {\n echo($this->id);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n 我正在尝试使用创建一些编程测试phpUnit。我需要使用数据提供程序,但每次尝试时,它都会引发错误。我什至使用 文档中给出的示例phpUnit。
/**
* @dataProvider additionWithNonNegativeNumbersProvider
*/
public function testAdd($a, $b, $expected)
{
$this->assertSame($expected, $a + $b);
}
public function additionWithNonNegativeNumbersProvider()
{
return [
[0, 1, 1],
[1, 0, 1],
[1, 1, 3]
];
}
Run Code Online (Sandbox Code Playgroud)
我期望输出是:
There was 1 failure:
1) DataTest::testAdd with data set #3 (1, 1, 3)
Failed asserting that 2 is identical to 3.
Run Code Online (Sandbox Code Playgroud)
但它是:
ArgumentCountError : Too few arguments to function controllerTests::testAdd(), 0 passed in phar://C:/xampp/htdocs/2019-1-qa-grupo1/myss/Tests/phpunit-8.1.2.phar/phpunit/Framework/TestCase.php on line 1172 and exactly 3 …Run Code Online (Sandbox Code Playgroud) 在功能测试期间,我需要单击按钮来发出 ajax 请求。
在浏览 symfony 测试文档时,我意识到您是否可以单击:
我的按钮有以下 id = "js-scroll-down"
当我尝试这个时:
$btn = $crawler->filter('#js-scroll-down')->eq(0)->link();
$crawler = $client->click($btn);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
LogicException:无法从“按钮”标签导航。
我正在将我的应用程序从 Codeigniter 迁移到 Laravel,我们也正在进行迭代和单元测试。
该数据库由2个数据库组成:
old这是最初的 codeigniter 中使用的。new这用于与 codeingiter 项目不相关的其他功能。因此,我想制作一个用于old数据库的迁移脚本,但为了避免故障,我想为每个数据库的迁移脚本指定一个特定的文件夹。
因此我找到了这个工具: https: //github.com/Xethron/migrations-generator并通过此帮助输出:
Description:
Generate a migration from an existing table structure.
Usage:
migrate:generate [options] [--] [<tables>]
Arguments:
tables A list of Tables you wish to Generate Migrations for separated by a comma: users,posts,comments
Options:
-c, --connection[=CONNECTION] The database connection to use. [default: "etable_api"]
-t, --tables[=TABLES] A list of Tables you wish to Generate Migrations for separated by a comma: users,posts,comments
-i, --ignore[=IGNORE] …Run Code Online (Sandbox Code Playgroud) 我有一个 PHP 项目,它加载一个名为 的引导文件custom_funcs.php,该文件位于 Web 根目录中。该文件包含一堆函数,定义了几个常量,并执行以下操作:
require dirname( __DIR__ ) . '/lib/php/vendor/autoload.php';
spl_autoload_register( function ($class_name) { include __DIR__ ."/classes/$class_name.php"; });
set_include_path( get_include_path() . PATH_SEPARATOR . SITEROOT );
Run Code Online (Sandbox Code Playgroud)
第一行加载 Composer 自动加载器。(请注意,Composer 库位于 Web 根目录之外)。第二行告诉我的代码在哪里寻找无法识别的类,这样我就不必不断手动加载我曾经使用过的类文件。第三行将 Web 根目录添加到 PHP 的 PATH 中。
几年来,它与几个 Composer 包一起运行得很好。
然后...我安装了 PhpUnit。总的来说,我的工作正常,除了当我运行测试时:
Warning: include(C:\...path_to_web_root.../classes/SebastianBergmann\Invoker\Invoker.php): failed to open stream: No such file or directory in C:\...path_to_web_root...\common_funcs.php on line 14
Warning: include(): Failed opening 'C:\...path_to_web_root.../classes/SebastianBergmann\Invoker\Invoker.php' for inclusion (include_path='xxxxxxx') in C:\...path_to_web_root...\common_funcs.php on line 14
Run Code Online (Sandbox Code Playgroud)
所以 …
运行测试需要时间,有时我只是想知道覆盖范围。是否可以运行类似的东西,phpunit --coverage-text使其仅输出测试覆盖率而不实际运行所有测试?
我目前正在我的 Symfony 应用程序中引入测试。其中一些失败了,需要很长时间才能运行它们。
是否可以使用 simpl-phpunit 命令运行单个测试?
与我的测试的命名空间,但最终得到
./vendor/bin/simple-phpunit App\tests\Controller\DefaultControllerTest
Run Code Online (Sandbox Code Playgroud)
无法打开文件“ApptestsControllerDefaultControllerTest.php”。
并通过我的测试的相对路径,它会导致:
./vendor/bin/simple-phpunit tests/Controller/DefaultControllerTest
Run Code Online (Sandbox Code Playgroud)
无法打开文件“tests/Controller/DefaultControllerTest.php”。
我按照文档创建了一个非常基本的控制台命令测试:
<?php
namespace Tests\Feature;
use PHPUnit\Framework\TestCase;
class QueueJobCommandTest extends TestCase
{
/**
* Test a job argument is requied
*
* @return void
*/
public function testNoArgumentsIsError()
{
$this->artisan('queue:job')
->expectsOutput('No job specified')
->assertExitCode(0);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行 phpunit 时出现错误:
Error: Call to undefined method Tests\Feature\QueueJobCommandTest::artisan()
任何关于为什么TestCase::artisan()未定义的帮助将不胜感激。
phpunit ×10
php ×7
laravel ×5
symfony ×2
unit-testing ×2
autoload ×1
codeigniter ×1
composer-php ×1
laravel-5 ×1