2013-10-16 71 views
0

我編寫單元測試使用摩卡我的Node.js應用程序的JavaScript參數。由於我的測試中包括大量的冗餘assert.equal(someFunction(arg1, arg2, arg3...), expected);的,我覺得做這樣的:改變對飛

var assertEqual = function(func, result) 
{ 
    assert.equal(func, result); 
} 

descrirbe('someFunction()', function() { 
    var arg1 = ... 
    var arg2 = ... 
    var func = someFunction; 
    assertEqual(func, result) 

    arg1 = ... 
    arg2 = ... 
    assertEqual(func, result); 
} 

這顯然是func不起作用宣佈在其參數將綁定。有沒有辦法通過JavaScript中的引用來傳遞這些參數,以便我可以不斷修改它們,只需調用func而不是每次都傳遞參數?

+0

你傳遞給func的是什麼?在assert.equal它應該是func()不func – user568109

回答

2

只是要assertEqual便返回功能,並有一個功能是你叫什麼,而不是FUNC:

function assertEqual(func, expected) { 
    return function() { 
     var result = func.apply(this, arguments);//result if you called the old function normally 
     assert.equal(result, expected);//pass/fail test 
     return result; //return the result 
    } 
} 

var func = assertEqual(oldfunc, result); 
func(arg1, arg2); 
func(arg3, arg4); 

//example: 
var func = assertEqual(function(a,b) {return a*5 - b}, 15); 
func(4, 5); //=> 15, calls assert.equal(15, 15) 
func(2, 8); //=> 5, calls assert.equal(5, 15) 

* 更新* 同樣試驗上述使用範圍變量
VAR ARG1 = 4,ARG2 = 5,結果= 15; //一些隨機範圍變量 功能somefunc(){ 返回ARG1 * 5 - ARG2}; }

//same test and results as above 
var func = assertEqual(somefunc, result); 
func(); 
arg1 = 2; 
arg2 = 8; 
func(); 
+0

我怎樣才能夠重新調用這個函數,只需在'var func ='之前設置它們,使用func的不同參數? – darksky

+0

這將調用原始功能正常(例如,如果oldfunc =功能(A,B){返回== B})和FUNC = assertEqual便(oldfunc,假的),調用FUNC(4,5)調用assert.equal(真,false) – megawac

+0

但是我需要每次用新的參數重置oldfunc。這可能會影響整個目的,因爲我可能只是將函數的參數調用並傳遞給'assert.equal'。我想定義一個函數,設置哪些變量是它的參數,以及當我更改這些變量時,函數中的參數會改變(通過引用傳遞),而不是使用新參數重新定義函數。那有意義嗎?看看我上面的代碼。我再次調用'assertEqual'並重新設置參數,而不用重新定義'func'是什麼。 – darksky

0

在我看來,像你可能只是使變量全球性的,而不是將它們傳遞給函數作爲參數,你可以設置/從你的代碼的任何地方引用它們。

編輯: 在你的榜樣,參數其實是全球性的,只是這樣對待他們,而不是作爲參數。

+0

他們不是本地。他們在'describe()'函數中。 – darksky