如何在dalekjs .execute()中执行外部函数?

时间:2014-02-24 09:58:05

标签: javascript dalekjs

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

1 个答案:

答案 0 :(得分:3)

取决于您对external的意思。

如果要执行客户端JavaScript中已存在的功能,则必须通过全局window对象访问该功能。例如:

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

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

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

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

如果你的意思是“在Dalek Testsuite中定义的函数”与外部,我可能必须让你失望,因为Daleks testfiles和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

   })
 }

希望能回答你的问题,如果没有,请提供更多细节。

编辑:

使用node own require

加载文件
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 / file:Dalek DRY Example