我正在尝试使用在PHPStorm中运行phpunit测试的集成方法,并使它无法正常工作。
PHP:
5.6.10 PHP单位:
4.5.1
PHPStorm:8.0.3
多亏了/sf/answers/2124185101/,我才知道必须将phpunit版本降级到<4.6。
查找/sf/answers/1813233271/我在配置中尝试了@runInSeparateProcess表示法和strerr =“ false | true”。通过进程隔离,我看到了与此用户相同的问题(基本上是phpunit --help,而不是每个测试都隔离)。使用stderr =“ false | true”可以得到相同的结果(无法修改标头信息……等等)。
在没有进程隔离或将stderr设置为true或false的情况下,测试运行良好,都可以通过测试。

目前,我显然只是在终端中运行测试,但是我真的很希望能够使用coverage功能,但是对于标头调用之后的任何代码行,它基本上都没有用。
我为我的PHP应用程序使用phpunit(100%覆盖率)进行单元测试,我有这个:
$xml = simplexml_load_string($soapResponse);
if (false === $xml) {
throw new \Exception('invalid XML');
}
Run Code Online (Sandbox Code Playgroud)
我找不到带有simplexml_load_stringreturn 的测试用例false。
如果您有解决方案...谢谢
当使用带有PhpBrowser驱动程序的REST模块通过代码接收测试发出请求时,没有数据和文件通过Silex应用程序。
// ApiTester $I
$I->wantTo('Submit files');
// prepare:
$data = ['key' => 'value'];
$files = [
'file_key' => 'path/to/file.doc',
'file2_key' => 'path/to/file2.doc'
];
// act:
$I->haveHttpHeader('Content-Type', 'multipart/form-data');
$I->sendPOST('/attachments/', $data, $files);
Run Code Online (Sandbox Code Playgroud)
I have http header "Content-Type","multipart/form-data"
I send post "/attachments/",{"key":"value"},{"file_key":"/path/to/file/...}
[Request] POST http://localhost/attachments/ {"key":"value"}
[Request Headers] {"Content-Type":"multipart/form-data"}
[Page] http://localhost/attachments/
[Response] 400
[Request Cookies] []
[Response Headers] {"Date":["Tue, 25 Oct 2016 09:15:31 GMT"],"Server":["Apache/2.4.10 (Debian)"],"Cache-Control":["no-cache"],"Access-Control-Allow-Origin":["*"],"Access-Control-Allow-Headers":["Content-Type, Authorization"],"Access-Control-Allow-Methods":["GET,PATCH,PUT,POST,HEAD,DELETE,OPTIONS"],"Content-Length":["1235"],"Connection":["close"],"Content-Type":["application/json"]}
[Response] {"status":400,"meta":{"time":"2016-10-25 09:15:31"},"title":"Invalid Request","errors":"No data received","details":{"error_class":"Symfony\Component\HttpKernel\Exception\BadRequestHttpException"
Run Code Online (Sandbox Code Playgroud)
该测试可与Silex驱动程序一起使用,但在CI服务器上将不可选。我们还检查了Postman,API路由按预期工作,文件已发送且一切正常。
我在Travis运行PHPUnit时遇到了一些麻烦.
我的travis配置很简单
language: php
php:
- 7.0
- 7.1
script: phpunit
Run Code Online (Sandbox Code Playgroud)
我的phpunit.xml如下,
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="Basic Test Suite">
<directory suffix=".php">./tests/</directory>
</testsuite>
</testsuites>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
还有我的composer.json
{
"name": "nikhilkuria/nikeandphp",
"description": "A PHP library used to work with Nike+ API",
"type": "library",
"authors": [
{
"name": "nikhilkuria",
"email": "nikhilkuria@gmail.com"
}
],
"require": {
"monolog/monolog": "^1.22"
},
"require-dev": {
"phpunit/phpunit": "5.7.*"
},
"autoload": {
"psr-4": {"NikeAndPhp\\": "src/NikeAndPhp"}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是特拉维斯无法找到我的autoload.php.这是我在travis日志中看到的,
无法打开文件"/home/travis/build/nikhilkuria/nikeandphp/vendor/autoload.php".
整个日志都在这里.
这里似乎缺少什么?
我在Homestead-7上使用Laravel 5.5,phpunit 6.5.5(我认为)。
我正在尝试本教程:https : //laravel-news.com/your-first-laravel-application(这应该告诉您很多我在框架方面的经验)
测试失败(由于TokenMismatchException),尽管我尝试了许多将其APP_ENV设置为的方法local,但我设法找出了设置为该变量的根本原因testing。
最后,让我克服了这个问题的是设置变量,如下所示:
APP_ENV=testing vendor/bin/phpunit
Run Code Online (Sandbox Code Playgroud)
然后,测试成功完成。
我的问题是,我在做什么错?上述破解显然不是最好的方法。必须有一种正确执行此操作的方法。
更新资料
内容phpunit.xml:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<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="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
</php>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
预先感谢您的宝贵时间。
我正在使用Laravel 5.6(Spark 6.0)进行一些测试,并设置事件和通知.
我不想每次测试都发送电子邮件,有没有办法可以关闭进行测试?
做一些谷歌搜索显示添加'prepend'值到邮件配置:
'pretend' => env('MAIL_PRETEND', true)
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不起作用,我在Laravel文档中找不到任何内容.在l5.6还有办法做到这一点吗?
编辑:通过不起作用,我的意思是邮件仍然通过电子邮件发送.
谢谢!
当Eloquent模型属性之一更新时,我正在使用的应用程序将触发一个事件。
Eloquent模型被调用Job,并且应该在更新属性JobCustomerTotalAmountDueChanged时触发duration。我在中有以下代码JobObserver:
public function saved(Job $job)
{
if ($job->isDirty('duration')) {
event(new JobCustomerTotalAmountDueChanged($job));
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用进行测试时Event::fake,不会触发savedEloquent 事件,这意味着永远不会执行方法中的代码。从我看到的assertDispatched和assertNotDispatched方法仅适用于伪造的事件。有没有一种方法可以断言是否不触发特定事件Event::fake?
我正在使用PHPUnit为存储功能创建单元测试,该存储功能将数据存储在数据库中。
目前,我正在测试验证它是否已存储数据。
但是,我还想创建一个测试,以证明如果模型保存功能失败,则会生成laravel日志消息。
下面的代码显示了存储功能。“ log :: info”是我要测试的行。
谢谢。
public function store(Venue $venue){
$saved = $venue->save();
if($saved == false){
Log::info('Failed to Save Venue'. $venue);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我通过了一个空模型,由于数据库限制,该模型将导致保存失败
public function test_venue_store_failed(){
$venue = new Venue();
$venueRepo = new VenueRepository();
$this->withExceptionHandling();
$venueRepo->store($venue);
}
Run Code Online (Sandbox Code Playgroud) 我在命令行中不断收到此错误:
致命错误。找不到ClassPHPUnit_ Framework_TestCase。
请我出来。
phpunit ×10
php ×5
laravel ×3
laravel-5 ×3
unit-testing ×2
codeception ×1
composer-php ×1
laravel-5.5 ×1
netbeans ×1
phpstorm ×1
simplexml ×1
travis-ci ×1