我尝试使用PHPUnit v8。但是,我没有用PhpStorm成功。当我在PhpStorm中运行简单测试(类方法)时,收到以下消息:
PHP Fatal error: Uncaught PHPUnit\Runner\Exception: Class 'Mrself\\TreeType\\Tests\\Functional\\BuildingTest' could not be found in '/vagrant/symfony-tree-type/tests/Functional/BuildingTest.php'. in /vagrant/symfony-tree-type/vendor/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php:65
Run Code Online (Sandbox Code Playgroud)
是的,我有该类,是的,我已正确配置了psr:
"autoload": {
"psr-4": {
"Mrself\\TreeType\\": "./src/"
}
},
"autoload-dev": {
"psr-4": {
"Mrself\\TreeType\\Tests\\": "./tests/"
}
}
Run Code Online (Sandbox Code Playgroud)
我一切设置正确的证明是,当我运行vendor/bin/phpunit
它时,它给我正确的结果。
当我在PhpStorm中运行方法时,得到了以下调用:
/usr/bin/php /vagrant/symfony-tree-type/vendor/phpunit/phpunit/phpunit --configuration /vagrant/symfony-tree-type/phpunit.xml --filter "/(::testFormCanBeBuild)( .*)?$/" Mrself\\TreeType\\Tests\\Functional\\BuildingTest /vagrant/symfony-tree-type/tests/Functional/BuildingTest.php --teamcity
Run Code Online (Sandbox Code Playgroud)
但是,如果我将类名称空间放在前面,那么\\
一切也将正常运行。我不知道发生了什么事。PHPUnit版本7也可以正常工作。
尽管有很多相关问题,但他们没有回答如何解决以下问题.
我有一个nodejs文件index.js.
var browserify = require('browserify');
var data = getSomeData();
browserify('entry.js').bundle();
Run Code Online (Sandbox Code Playgroud)
我希望这样data
可以访问entry.js
.我找到了browserify选项,insertGlobalVars
但我找不到任何适当的文档或示例.我试过{insertGlobalVars: {myVar: someData}}
但它不起作用.
我无法调用,require('someData')
因为我的数据仅在执行时生成index.js
.
更新:数据是一个数组; key是文件名,值 - 文件内容(大小约为500b).
我有一个名称空间App\Term
,保存为属性:$this->name = 'App\Term'
.我怎样才能调用这个类的静态方法$this->name::methodName()
呢?还是有另一个解决这个问题的方法吗?
说,我config('app.configKey')
第一次得到配置。Laravel 加载文件应用程序并获取所需的密钥。如果我下次调用它,laravel 会再次加载文件吗?或者它存储价值?
我想知道我是否应该写:
$value = config('app.key');
/* Some code here ... */
$anotherVar = $value;
Run Code Online (Sandbox Code Playgroud)
或者:
$value = config('app.key');
/* Some code here ... */
$anotherVar = config('app.key');
Run Code Online (Sandbox Code Playgroud)
这只是一个例子。在实际代码中,我在一类中获得了配置。后来我在另一个班级中再次获得了这个配置。
我知道,我可以使用\Session::getId()
.但它不时变化.也许我不理解会议.据我所知,当php运行时它会启动,当php代码完成时它会被删除.另一方面,我读到会话ID存储在cookie中,当用户再次打开您的站点时,会话'恢复'.那么为什么在我的情况下会话ID会很快到期.如何才能获得至少在一个月内没有变化且会被购物车使用的"会话ID"?
更新:问题变得有点混乱,因为我不想要如何调用某些东西而不知道这些东西是如何工作的.
我想知道如何识别访客用户并在一段时间内获得其唯一ID(比通常存在的会话长).在结果中我想要具有someFunction
可以执行以下操作的功能:
$guestId = someFunction();
$dbRow = Model::findByGuestIdOrNew($guestId);
// now $dbRow contains all previosly save info about a guest user,
// of it does not exists, create new row by `$guestId`.
Run Code Online (Sandbox Code Playgroud)
在我看来,会话有一些唯一的id,它存在的时间比会话长.当我看到大多数购物车包中的购物车项目直接保存到会话时,我想到了这个想法.我真的不知道这些包存放购物车的时间有多长,但我认为这个时间甚至超过一周.这个购物车生命周期是我在使用这样的购物平台时定义的:shopify和bigcommerce.我知道他们存放购物车的时间超过一周.所以我想知道他们在创建帐户之前如何识别访客用户.此外,了解大多数"购物车"包存储购物车物品的时间长度将是一个有用的信息.
我正在尝试做的事情:
我为解决该问题所做的工作:
2.由此:是的,我有/app/.profile.d/heroku-exec.sh
。
4.我也发现了这个。并看到这rm /bin/sh && ln -s /bin/bash /bin/sh
可能有帮助。但它是针对 docker 的,如果我不使用 docker,我不知道将其插入哪里。我尝试Procfile
使用以下内容进行创建:(web: rm /bin/sh && ln -s /bin/bash /bin/sh
不要评判我,我只是尝试过)。但在这种情况下,测功机只是崩溃了。
当我没有找到有关此错误的相关信息时,我有点困惑。Heroku 不提供此错误的文档。作为一种变体,我想这Establishing credentials... error
可能意味着我没有通过任何身份验证。或许。但哪一个呢?我可以heroku run bash
,说明我通过了认证。也许exec
需要 ssh 密钥?
有什么建议么?
我已将我的应用程序配置为以这种方式发送有关异常的电子邮件 ( prod/monolog.yaml
):
monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: grouped
excluded_404s:
# regex: exclude all 404 errors from the logs
- ^/
grouped:
type: group
members: [nested, deduplicated]
deduplicated:
type: deduplication
handler: swift
swift:
type: swift_mailer
from_email: '%admin_notifier_from%'
to_email: '%admin_notifier_to%'
subject: 'Error'
level: debug
formatter: monolog.formatter.html
content_type: text/html
nested:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
console:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine"]
Run Code Online (Sandbox Code Playgroud)
它有效。当我在某个控制器中抛出异常时,打开该控制器的 url 我收到一封带有异常的电子邮件。所以电子邮件在 http 级别工作。但是它不在控制台级别。我正在使用 SF v4.2。我发现在最近的 symfony 版本中添加了控制台异常日志记录,因此无需为其添加错误控制台侦听器。它应该适用于我的版本。实际上我在日志文件中看到异常消息。但是没有邮箱。所以我决定添加一个错误侦听器并记录关键消息(假设它应该触发主 Monolog 处理程序)。所以我做到了。再一次,我在日志文件中看到了我的关键消息,但仍然没有电子邮件。那我做错了什么?我想收到有关控制台异常的异常电子邮件。
我试图用“快速”处理程序替换“重复数据删除”处理程序,但它没有帮助。
我使用PHPStorm并具有以下消息"多个定义" PHPUnit\Framework\TestCase
.我不确定,但看起来像PHPStorm使用compose autoload系统.所以我试图找到不必要的类定义所在的目录并排除它们.
我发现我可以使用exclude-from-classmap
房产了autoload
.所以我添加了以下内容:
"vendor/cloudinary/cloudinary_php/tests/",
"vendor/bin/.phpunit/phpunit-5.7/src/ForwardCompatibility/"
Run Code Online (Sandbox Code Playgroud)
这些是存在不必要的类定义的目录.然后我跑了composer dump-autoload
.没有改变.重启PHPStrom - 什么都没有.
这是我的整个自动加载部分:
"autoload": {
"psr-4": { "": "src/" },
"classmap": [ "app/AppKernel.php", "app/AppCache.php" ],
"files": [
"src/helpers/helpers.php"
],
"exclude-from-classmap": [
"vendor/cloudinary/cloudinary_php/tests/",
"vendor/bin/.phpunit/phpunit-5.7/src/ForwardCompatibility/"
]
},
Run Code Online (Sandbox Code Playgroud)
我注意到了相关的问题,但它们不符合我的要求.我知道从composer中排除文件夹的方法.
当我在控制台中使用 PhpUnit 运行单元测试时,所有异常都会立即显示在那里。然而,当我转向功能测试时,我看不到发生的异常。
首先,我尝试了 symfony,WebTestCase
就像这里所说的那样。所以我$client
用所需的参数打电话,我得到了回应。但是我花了一些时间才明白这种行为就像我手动打开要测试的页面一样。来自$client->request
包含文本 (html)的响应。是的,那里显示了错误,但有很多 html,而且很难找到异常。是的,我可以使用,$crawler->filter('.text-exception')->first()->text()
但我希望异常在单元测试中可见。当我测试命令时,PhpUnit 和正常情况一样显示异常。
我试图将代码复制web/app_dev.php
到测试用例。但它是一样的。我只有 html 响应。
那么如何才能让 PhpUnit 在功能测试中像单元测试一样显示异常呢?
假设我们有这样的代码(js):
/**
* @param {String} type Could be only 'high' or 'low'
* @return {String}
*/
function getSome(type) {
if (type == 'high') {
return 'This is high';
} else if (type == 'low') {
return 'This is low';
}
}
Run Code Online (Sandbox Code Playgroud)
如果这个变体比这更好(我不包括注释;它们是相同的)?:
function getSome(type) {
if (type == 'high') {
return 'This is high';
} else {
return 'This is low';
}
}
Run Code Online (Sandbox Code Playgroud)
我多次遇到类似的情况.通常我没有考虑最好的变体,并写了第一个.但现在我想决定将来使用哪种变体.
最后一个问题.如果我需要检查变量的相等性,else
如果变量只有两个值,并且第一个值是在if
语句中给出的?我也想知道使用函数注释如何影响答案.
我想trigger_error('Deprecated', E_USER_DEPRECATED);
在运行时抑制此警告。从我读过的内容来看,我可以使用error_reporting(E_ALL & -E_USER_DEPRECATED & -E_DEPRECATED);
. 但这是行不通的。我尝试过error_reporting
使用 是否可以正常工作error_reporting(0)
。这有效。我错过了什么?我没有找到其他方法来解决我的问题。并且没有注意到这种方式对其他人不起作用。
我的代码不抑制已弃用的警告:
error_reporting(E_ALL & -E_USER_DEPRECATED);
trigger_error('Deprecated', E_USER_DEPRECATED);
Run Code Online (Sandbox Code Playgroud)
PHP 版本:7.0.14
.
PhpStorm版本2017.1.
当我想添加一个类文件时,我右键单击必要的文件夹> New> PHP Class,我得到了定义的php类.但我想改变一些事情.
首先,删除由PhpStorm创建,并且没有{
新行,但只有一行具有类名.
我该怎么做?我对PhpStorm很新,我希望它有一些片段,但谷歌搜索没有奇怪的结果.
我希望PhpStorm默认情况下或使用热键或实时模板插入当前名称空间。
在我创建新的Php类(“ New | PHP Class”对话框)之后,有一个用于命名空间的字段。有没有办法自动填充它?看起来没什么大不了的,因为在我的情况下,名称空间只是从开始的目录路径(我使用composer)src
。我的搜索工作根本没有给我任何帮助。看起来PhpStrom没有此功能。但是也许有一些插件或黑客?
php ×4
phpstorm ×4
laravel ×2
phpunit ×2
symfony ×2
browserify ×1
composer-php ×1
config ×1
heroku ×1
javascript ×1
namespaces ×1
session ×1
symfony4 ×1
variables ×1