2

我想在dalekjs 的.execute()函数中执行一个外部函数。有可能这样做吗?

4

1 回答 1

3

取决于你的意思external

如果要执行客户端 JavaScript 中已经存在的函数,则必须可以通过全局window对象访问它。例如:

在我的一个客户端脚本中,我有这样的东西:

function myAwesomeFn (message) {
  $('body').append('<p>' + message + '</p>');
}

如果该函数是在全局范围内定义的(不在某些 IIFE fe 内),则可以在执行函数中触发它,如下所示:

test.execute(function () {
  window.myAwesomeFn('Some message');
});

如果您的意思是“在 Dalek 测试套件中定义的函数”与外部,我可能一定会让您失望,因为 Daleks 测试文件和execute函数的内容是在不同的上下文中调用的(甚至是不同的 JavaScript 引擎)。

所以这不起作用:

'My test': function (test) {
   var myFn = function () { // does something };

   test.execute(function () {
     myFn(); // Does not work, 'myFn' is defined in the Node env, this functions runs in the browser env

   })
 }

有什么作用:

'My test': function (test) {


   test.execute(function () {
     var myFn = function () { // does something };
     myFn(); // Does work, myFn is defined in the correct scope

   })
 }

希望能回答您的问题,如果没有,请提供更多详细信息。

编辑:

使用节点自己的要求加载文件

var helper = require('./helper');
module.exports = {
  'My test': function (test) { 
     test.execute(helper.magicFn)
   }
 };

在你的 helper.js 中,你可以做任何你想做的事,这会有意义(或多或少):

module.exports = {
  magicFn: function () { 
     alert('I am a magic function, defined in node, executed in the browser!');
   }
 };

有关如何保持测试代码 DRY 的更多策略;),请查看此 repo/文件:Dalek DRY 示例

于 2014-03-06T11:44:22.310 回答