2

dalekjsの.execute()関数内で外部関数を実行したいです。それは可能ですか?

4

1 に答える 1

3

あなたが何を意味するかによりますexternal

windowクライアント側の JavaScript に既に存在する関数を実行する場合は、グローバルオブジェクトを介してアクセスできる必要があります。例えば:

クライアント側のスクリプトの 1 つに、次のようなものがあります。

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

その関数がグローバル スコープ (一部の IIFE fe 内ではなく) で定義されている場合、次のように実行関数でトリガーできます。

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

外部で「Dalek テストスイート内で定義された関数」を意味する場合、Dalek のテストファイルと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

   })
 }

あなたの質問に答えてくれることを願っています。そうでない場合は、さらに詳細を提供してください。

編集:

ノード独自の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 に保つ方法に関するさらなる戦略については、次のリポジトリ/ファイルを確認してください: Dalek DRY の例

于 2014-03-06T11:44:22.310 に答える