我试图对我的Stripe webhook处理程序的实现进行单元测试.条带webhook数据作为POST请求正文中的原始JSON在线上传播,因此我捕获并解码数据:
public function store()
{
$input = @file_get_contents("php://input");
$request = json_decode($input);
return Json::encode($request);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试对此代码进行单元测试,但我无法弄清楚如何在单元测试中发送原始JSON数据,以便我可以使用该file_get_contents("php:input//")函数检索它.这是我尝试过的(使用PHPUnit):
protected $testRoute = 'api/stripe/webhook';
protected $validWebhookJson = <<<EOT
{
"id": "ch_14qE2r49NugaZ1RWEgerzmUI",
"object": "charge",
// and a bunch of other fields too
}
EOT;
public function testWebhookDecdoesJsonIntoObject()
{
$response = $this->call('POST', $this->testRoute, $this->validWebhookJson); // fails because `$parameters` must be an array
$response = $this->call('POST', $this->testRoute, [], [], ['CONTENT_TYPE' => 'application/json'], $this->validWebhookJson);
dd($response->getData(true)); // array(0) {} BOOOO!!! Where for to my data …Run Code Online (Sandbox Code Playgroud) 例如:
Object.prototype.toString.call(new Date); // [object Date]
Object.prototype.toString.call(new Array); // [object Array]
Object.prototype.toString.call(new Object); // [object Object]
Run Code Online (Sandbox Code Playgroud)
现在考虑一下:
var PhoneNumber = function(number) {
this.number = number;
}
Run Code Online (Sandbox Code Playgroud)
我可以覆盖该toString()方法,但它并没有真正重命名对象类型.它只是假装它:
PhoneNumber.prototype.toString = function() {
return '[object PhoneNumber]';
}
new PhoneNumber().toString(); // [object PhoneNumber]
Run Code Online (Sandbox Code Playgroud)
然而,l33t h4x0rs知道我的toString()方法是骗局,我是一个n00b:
Object.prototype.toString.call(new PhoneNumber); // [object Object]
Run Code Online (Sandbox Code Playgroud)
无论toString()在原型上覆盖哪种方法,我希望得到的结果如何:
Object.prototype.toString.call(new PhoneNumber); // [object PhoneNumber]
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我有一系列可能会或可能不会丢失一些数字的整数.是否可以在不使用循环结构的情况下找到最小的缺失数字?如果没有缺失的数字,该函数应返回范围的最大值加1.
这就是我用for循环解决它的方法:
$range = [0,1,2,3,4,6,7];
// sort just in case the range is not in order
asort($range);
$range = array_values($range);
$first = true;
for ($x = 0; $x < count($range); $x++)
{
// don't check the first element
if ( ! $first )
{
if ( $range[$x - 1] + 1 !== $range[$x])
{
echo $range[$x - 1] + 1;
break;
}
}
// if we're on the last element, there are no missing numbers
if ($x + …Run Code Online (Sandbox Code Playgroud) 我试图$scope.$on()在我$rootScope.broadcast()发生事件时触发的控制器中触发该方法.我发现这个问题很有用:如何以角度测试事件?,但我仍然无法$rootScope通过控制器检测到从上方广播的事件$scope.
到目前为止,我已经设法测试该$broadcast方法是在相应的上调用的$rootScope,但并不是说该$on方法是在相应的$scope时$broadcast调用的$rootScope.
我试图$rootScope.$broadcast直接进行测试,但是我的间谍没有接受这个事件.
这是我的控制器:
angular.module('app.admin.controllers.notes', [])
.controller('NotesCtrl', function($scope) {
$scope.$on('resource-loaded', function(event, resource) { // I want to test this
$scope.parentType = resource.type;
$scope.parentId = resource.id;
});
});
Run Code Online (Sandbox Code Playgroud)
这是我的测试:
describe('The notes controller', function() {
beforeEach(module('app.admin.controllers.notes'));
var scope, rootScope, NotesCtrl;
beforeEach(inject(function($controller, $injector, $rootScope) {
rootScope = $rootScope;
scope = $rootScope.$new(); // I've tried this with and without $new() …Run Code Online (Sandbox Code Playgroud) 我正在使用oh-my-zsh并尝试启用git-flow-completion.我按照这里的说明将其安装为插件.
我按照说明克隆了插件文件:
git clone https://github.com/bobthecow/git-flow-completion ~/.oh-my-zsh/custom/plugins/git-flow-completion
Run Code Online (Sandbox Code Playgroud)
我的插件目录结构与安装说明中的示例相同.
我编辑了我的~/.zshrc文件包括:
plugins=(git git-flow git-flow-completion)
Run Code Online (Sandbox Code Playgroud)
但是,git flow完成不起作用.当我输入git flow并点击时tab,我得到当前目录中的文件列表而不是git flow子命令.
内置插件工作正常.我编辑~/.zshrc了包括:
plugins=(git git-flow git-flow-completion emoji emoji-clock)
Run Code Online (Sandbox Code Playgroud)
当我打开一个新的终端时,random_emoji和emoji-clock函数会产生预期的输出,但是git flow完成仍然不起作用.
我已经将我现有的PATH添加到我.zshrc加载的行上方oh-my-zsh.sh.没运气.
我检查了$ZSH_CUSTOM它的值,它指向git-flow-completion安装插件的目录.
我想知道是否正在加载自定义插件,所以我安装了这个auto-stats插件并且它工作正常,所以这个问题似乎与git-flow-completion插件隔离.
我也试过直接加载插件文件:
source ~/.oh-my-zsh/custom/plugins/git-flow-completion/git-flow-completion.zsh
Run Code Online (Sandbox Code Playgroud)
此命令没有输出,并且完成仍然不起作用.
我该如何解决此问题?
我正在尝试在我的项目中使用 swiftmailer,以便我可以向多个用户发送 html 时事通讯。我已经彻底搜索过,但我所得到的一切都没有为我工作。我想在以逗号分隔的表单输入字段中粘贴多个收件人并将 html 电子邮件发送给他们。我将收件人设置为一个变量($recipients_emails)并将其传递给发送代码中的 setTo() 方法,与html_email.
问题是: Q1 如何从收件人输入字段发送给多个收件人。
我试过这个:
if (isset($_POST['recipients_emails'])) {
$recipients_emails = array($_POST['recipients_emails'] );
$recipients_emails= implode(',',$recipients_emails);
}
Run Code Online (Sandbox Code Playgroud)
Q2 如何在 heredoc 标签中制作 Html。当我尝试像这样连接时->setBody('<<<EOT'.$html_email.'EOT;', 'text/html');,我的消息会与 heredoc 标签一起出现。
if (isset($_POST['html_email'])) {
$html_email = $_POST['html_email'];
}
Run Code Online (Sandbox Code Playgroud)
我如何$_POST['html_email'];在 EOT 标签内输入;
这是 swiftmailer 发送脚本的一部分;
$message = Swift_Message::newInstance()
->setSubject($subject)
->setFrom($from)
->setTo($recipients_emails)
->setBody($html_email, 'text/html');
Run Code Online (Sandbox Code Playgroud)
注意:我还在学习这些东西。
我不仅仅是一个后端人而不是前端人,但JavaScript让我很感兴趣.我试图围绕我看来是多种不同的对象建模方法.
在过去的几年里,我一直主要编写与此类似的代码(假设加载了jQuery):
var TicketForm = {
elements: ['input', 'textarea', 'select', 'checkbox'],
enable: function(form) {
this.elements.forEach( function(el) {
form.find(el).prop('disabled', false);
});
},
disable: function(form) {
this.element.forEach( function(el) {
form.find(el).prop('disabled', true);
});
}
};
Run Code Online (Sandbox Code Playgroud)
这样我就可以简单地调用TicketForm.enable($('#whatever'));启用一个特定的表单,非常类似于PHP中的静态方法调用.
我最近一直在使用PHP中的闭包,我知道它们在JavaScript中也存在(我正在使用它们).我正在努力更彻底地掌握这个概念.在遇到这个令人惊讶的剧本之后:http://codepen.io/stuffit/pen/KrAwx,我决定尝试模仿该作者的编码风格.只是试图复制他的风格,我重写了我的代码:
var TicketForm = function() {
this.elements = ['input', 'textarea', 'select', 'checkbox'];
};
TicketForm.prototype.enable = function(form) {
this.elements.forEach( function(el) {
form.find(el).prop('disabled', false);
});
};
TicketForm.prototype.disable = function(form) {
this.elements.forEach( function(el) {
form.find(el).prop('disabled', true);
});
};
Run Code Online (Sandbox Code Playgroud)
但是,当我TicketForm.enable($('#whatever'));在这种情况下打电话时,我收到错误
Uncaught TypeError: Object …Run Code Online (Sandbox Code Playgroud) 我有一个项目托管在我自己的个人git服务器上(它不在GitHub上).该master分支是一个陈旧的旧Cookie,而且我不需要它了.
几个月前,我创建了一个0.8/develop分叉的master,从那时起,我们已经经历了0.8/master,0.9/develop,0.9/master和我们目前对1.0/develop.我想摆脱master分支,主要是因为它与我们建立的命名约定不符.这只是家务管理的问题.
我在SO上发现了几个相关的问题,以及博客文章,但它们似乎都特定于使用GitHub,而不是我自己的私人服务器:
这些都具体说明了以下内容:
您需要转到分叉存储库的主GitHub页面,然后单击"设置"按钮.
当然,这不是一个选项,因为我没有使用GitHub.我猜我可以在我的裸仓库中编辑配置文件的内容以达到相同的效果.那是对的吗?配置文件目前看起来像这样:
[core]
repositoryformatversion = 0
filemode = true
bare = true
logallrefupdates = true
ignorecase = true
precomposeunicode = false
sharedRepository = group
[remote "origin"]
url = file:///Library/WebServer/Documents/loupe
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
1.0/develop),还是最左边的分支(0.8/develop)?我正在构建一个访问私有 API 的 Web 应用程序。我正在使用的 API 使用基于 TLS 的 HTTP 基本身份验证。我的客户已请求 Web 应用程序的“记住我”功能,以便用户可以在给定设备上保持持久身份验证。
我的快速而肮脏的解决方案是Authorization在localStorage验证标题后将其存储。当然,如果可以不受限制地访问用户的设备,那么任何人都可以从中复制 auth 标头localStorage并将其解码以检索用户的登录名/密码组合。
除了整个设备受到损害之外,将此类敏感数据存储在localStorage. 是否localStorage可以作为敏感数据(例如密码)的存储库?如果没有,您将如何在单个浏览器会话之外将此类数据持久保存在用户设备上?
(我希望每个人都可以使用他或她的私钥......密码都是90年代的)
编辑阅读HTML5 localStorage security 后,似乎很明显敏感数据的存储localStorage通常是一个坏主意,但在这种情况下,身份验证持久性有什么更好的选择?
我刚刚将 MySQL 数据库从 5.5 更新到 5.6。我试图遵循最佳实践,所以我用来mysql_config_editor创建一个.mylogin.cnf文件:
mysql_config_editor set --login-path=local --host=localhost --user=example --password
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试时mysql --login-path=local,我收到此错误:
ERROR 1045 (28000): Access denied for user 'example'@'localhost' (using password: YES)
Run Code Online (Sandbox Code Playgroud)
但是,我仍然可以使用 登录mysql -u example -p,然后在提示符下粘贴密码。我已经三次检查我在mysql_config_editor命令中使用的密码是否正确。
我的补助金看起来像这样:
mysql> show grants;
+------------------------------------------------------------------------------+
| Grants for example@localhost |
+------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'example'@'localhost' IDENTIFIED BY PASSWORD <secret> |
| GRANT ALL PRIVILEGES ON `example`.* TO 'example'@'localhost' |
+------------------------------------------------------------------------------+
2 rows in set (0.00 …Run Code Online (Sandbox Code Playgroud) javascript ×3
php ×3
oop ×2
unit-testing ×2
angularjs ×1
arrays ×1
email ×1
forms ×1
git ×1
git-branch ×1
git-flow ×1
html ×1
iterator ×1
karma-runner ×1
loops ×1
mysql ×1
newsletter ×1
oh-my-zsh ×1
swiftmailer ×1