在QUnit测试中设置$this的范围

问题描述

|| 您如何在QUnit测试环境中设置正确的作用域以测试回调函数? 要测试的代码
<script type=\"text/javascript\">
    APP = {};
    APP.callBack = function() {
        $(this).closest(\"input\").val(\'foobar\');
    };

    $(function() {
        $(\"#button\").click(APP.callBack);
    });
</script>
<div>
  <a id=\"button\" href=\"#\"></a>
  <input id=\"id-for-testing-only\" name=\"test\" type=\"text\" value=\"barfoo\" />
</div>
测试代码
test(\"try callback with \'this\' scope\",function() {
    APP.callBack();
    equals($(\"#id-for-testing-only\").val(),\"foobar\",\"should set value to \'foobar\'\");
});
    

解决方法

        我认为,您可能想使用
.trigger()
来触发按钮上的'click \'然后检查值,而不是直接调用您的回调函数,当单独调用该函数时,回调函数的作用域不限于按钮的
this
$(\"#button\").trigger(\"click\");
    ,        我在QUnit中不知道,但是在Javascript中,您通常是这样的:
func.apply((this),[arguments]);
例如
function foo(x) { return this + x; }

foo.apply(1,[2]) == 3
所以我会尝试
APP.callback.apply(whateverYouWantForThis);
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...