小编Ben*_*old的帖子

我可以使用Laravel的`call`方法在单元测试中发送原始JSON数据吗?

我试图对我的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)

php unit-testing

7
推荐指数
2
解决办法
5159
查看次数

是否可以在JavaScript中更改对象类型的名称?

例如:

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)

这可能吗?

javascript oop

7
推荐指数
1
解决办法
117
查看次数

可以从这段PHP代码中删除for循环吗?

我有一系列可能会或可能不会丢失一些数字的整数.是否可以在不使用循环结构的情况下找到最小的缺失数字?如果没有缺失的数字,该函数应返回范围的最大值加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)

php arrays iterator loops control-structure

6
推荐指数
4
解决办法
746
查看次数

如何在AngularJS Karma单元测试中触发`$ on`事件?

我试图$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)

unit-testing angularjs karma-runner

6
推荐指数
1
解决办法
8381
查看次数

如何在oh-my-zsh中启用git-flow-completion?

我正在使用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_emojiemoji-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)

此命令没有输出,并且完成仍然不起作用.

我该如何解决此问题?

git-flow oh-my-zsh

6
推荐指数
2
解决办法
1233
查看次数

使用 swiftmailer 向多个收件人发送电子邮件

我正在尝试在我的项目中使用 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)

注意:我还在学习这些东西。

php forms email newsletter swiftmailer

6
推荐指数
2
解决办法
1万
查看次数

这些不同的对象创建方法在JavaScript中的适当应用是什么

我不仅仅是一个后端人而不是前端人,但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)

javascript oop

5
推荐指数
1
解决办法
91
查看次数

删除私有服务器(不是GitHub)上的git master分支

我有一个项目托管在我自己的个人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. 我应该将默认仓库设置为当前工作分支(1.0/develop),还是最左边的分支(0.8/develop)?
  2. 我需要对配置文件进行哪些修改才能设置默认仓库?

git branching-and-merging git-branch

5
推荐指数
1
解决办法
2031
查看次数

在 localStorage 中存储 HTTP Basic 授权标头是否存在任何安全问题?

我正在构建一个访问私有 API 的 Web 应用程序。我正在使用的 API 使用基于 TLS 的 HTTP 基本身份验证。我的客户已请求 Web 应用程序的“记住我”功能,以便用户可以在给定设备上保持持久身份验证。

我的快速而肮脏的解决方案是AuthorizationlocalStorage验证标题后将其存储。当然,如果可以不受限制地访问用户的设备,那么任何人都可以从中复制 auth 标头localStorage并将其解码以检索用户的登录名/密码组合。

除了整个设备受到损害之外,将此类敏感数据存储在localStorage. 是否localStorage可以作为敏感数据(例如密码)的存储库?如果没有,您将如何在单个浏览器会话之外将此类数据持久保存在用户设备上?

(我希望每个人都可以使用他或她的私钥......密码都是90年代的)

编辑阅读HTML5 localStorage security 后,似乎很明显敏感数据的存储localStorage通常是一个坏主意,但在这种情况下,身份验证持久性有什么更好的选择?

html javascript local-storage

5
推荐指数
1
解决办法
1035
查看次数

为什么我无法使用--login-path=local登录mysql?

我刚刚将 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)

mysql

5
推荐指数
1
解决办法
7219
查看次数