2017-02-21 14 views
-1

電子を学んでいるうちに、JavaScriptでテスト技術を勉強したいと思った。Mocha/Sinon - JavaScriptでのユニットテスト約束

const winston = require('winston'); 
const AutoLaunch = require('auto-launch'); 

const launchFunction = (mb) => { 
    const autolaunch = new AutoLaunch(); 

    autolaunch 
    .isEnabled() 
    .then((isEnabled) => { 
     if (isEnabled) { 
     return; 
     } 
     autolaunch.enable(); 
    }) 
    .catch((err) => { 
     winston.error(err); 
    }); 
}; 

私はがautolaunch.enabled場合()が正しく特定の条件でトリガされ主張したいと私は作成するために私を強制されません任意のテストを書くことで、問題の多くを持っている:私は、次のコードを持っています機能の正確なコピーを持つスタブは()です。このソリューションのこの設計で何かが間違っているかもしれないというオプションがあります - 私はそれをよりテスト可能にするためにコードを変更することができます(そしてそうしたいと思います)。コードのテスト容易性を損なうことなく、その問題にどのように対処すればよいですか?

私はモカsinonを使用しますが、私は本当にこれらのツールに添付

+1

約束をテストするには[chai-as-promised](http://chaijs.com/plugins/chai-as-promised/)をご覧ください。 –

答えて

0

を感じていない私は、より機能的なアプローチをしようとするだろう。問題のクロージャを関数でラップし、別々にテストします。

function enableWhenNeeded(autolaunch, isEnabled) { 
     if (isEnabled) { 
     return; 
     } 
     autolaunch.enable(); 
} 

autolaunch 
    .isEnabled() 
    .then(curry(enableWhenNeeded, autolaunch)) 
    .catch((err) => { 
     winston.error(err); 
    }); 

は、例の目的のために、私は機能カレー()を占めていたが、私は1を提供し、少なくとも35枚のJavaScriptフレームワークがあると思います。

テストに値するこのコードは常に問題です。 AutoLaunchが第三者である場合、なぜそれをテストするのですか?