2016-05-08 12 views
3

は、私が機能を持っている、のは、言ってみましょう:console.logステートメントでのMochaテスト機能の仕組みは?

function consoleOutput(param) { 
    var newParam = param * param; 
    console.log(newParam); 
} 

は、どのように私は(paramは、コンソールへの2つの出力によって乗算されます)この機能が正しく動作することになることを、モカでテストすることができます。ありがとう。

答えて

-6

以下のコードで見てみてください、あなたはモカテストケース

var assert = require('chai').assert; 

// Function to be Tested 
function consoleOutput(param) { 
    var newParam = param * param; 
    console.log(newParam); 
    return newParam; 
} 

// Mocha Test Case 
describe('Mocha Test Case', function() { 
    it('Square Root', function(done) { 
     var sqrt = consoleOutput(5); 
     assert.equal(sqrt, 25); 
     done(); 
    }); 
}); 

のアイデアを取得します更新(25日 - 3月 - 2017年):

については、以下の答えをチェックしてください最良のパラチェス

+5

これはひどいです。値を返すことによってテストが合格するように、プロダクションコードを変更する必要があります。これをしないでください。 –

18

これらのタイプのテストに最適なライブラリはSinonです。既存の関数を「フック」し、それらの関数がどのように呼び出されるかを追跡するために使用できます。例えば

const sinon = require('sinon'); 
const assert = require('assert'); 

// the function to test 
function consoleOutput(param) { 
    var newParam = param * param; 
    console.log(newParam); 
} 

it('should log the correct value to console',() => { 
    // "spy" on `console.log()` 
    let spy = sinon.spy(console, 'log'); 

    // call the function that needs to be tested 
    consoleOutput(5); 

    // assert that it was called with the correct value 
    assert(spy.calledWith(25)); 

    // restore the original function 
    spy.restore(); 
}); 
この方法の利点は、あなたがこのような場合には、大したことではない、本来の機能を(変更する必要はありませんが、常に可能ではないかもしれないということである

より大きなプロジェクトでは)。

+0

'TypeError:既に' wraonされているログを 'sinon.spy'行にラップしようとしましたか? – felamaslen

+0

@srynznfyraあなたは、すべてのテストの後にスパイで '.restore()'を呼んでいると確信していますか? – robertklep

+0

はい、 'spy.restore()'を 'console.log.restore()'に置き換えて修正しました。 – felamaslen