dalekjsの.execute()関数内で外部関数を実行したいです。それは可能ですか?
質問する
679 次
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 に答える