是否可以使用Sinon.JS检查函数参数是否正确绑定

时间:2016-05-09 19:39:04

标签: javascript unit-testing sinon sinon-chai

假设我们有一个函数返回一个函数并将参数绑定到它:

function A(x, y){
    return function(x, y){...}.bind(this, x, y);
}

现在我们想知道函数A是否正确绑定了参数:

var resultedFunction = A();
var spy = sinon.spy(resultedFunction);
spy();

问题 - 是否可以知道参数是否正确绑定?我试过这个,但它是一个空数组

spy.firstCall.args
spy.getCall(0).args

1 个答案:

答案 0 :(得分:0)

我终于找到了一些技巧。如果返回的函数不是匿名函数,那么我们可以窥探它并稍后检查参数:

<?php
/**
 * Hide some "ACF Section" related custom fields
 */
add_action('acf/load_field', 'sleek_hide_acf_section_fields', 10, 1);

function sleek_hide_acf_section_fields ($field) {
    $hide = array('section_name', 'section_modifiers', 'modifiers');

    global $current_user;

    if ((isset($field['_name']) and in_array($field['_name'], $hide)) and (is_admin() && is_user_logged_in() && !in_array('administrator', $current_user->roles))) {
        $field['disabled'] = true;
    }

    return $field;
}

add_action('admin_head', 'sleek_hide_acf_section_fields_css');

function sleek_hide_acf_section_fields_css () {
    $hide = array('section_name', 'section_modifiers', 'modifiers');

    global $current_user;

    if (is_admin() && is_user_logged_in() && !in_array('administrator', $current_user->roles)) {
        echo '<style>';

        foreach ($hide as $h) {
            echo 'div.acf-fc-popup a[data-layout="' . $h . '"]{display: none}';
        }

        echo '</style>';
    }
}