2017-06-21 9 views
0

私のコントローラは、既にテストした別のサーバーのAPIを照会し、正常に動作します。私はこのコントローラーをテストする方法を知りたいので、apiデータをフェッチしてレンダリングするだけです。私はすでにテストして、私のAPIがchai-httpで動作することを確認しました。Expressでユニットテストレンダリングビューを使用するにはどうすればよいですか?

function(req, res){ 
    rp(http://www.foobar.com/api/posts) 
    .then(function(posts){ 
     res.render('view', { data : posts }); 
    }) 
    .catch(function(err){ 
    next(err); 
    }) 
} 
+0

単体テストが好きなのは良いことですが、より重要なのは単体​​テストに当てはまる場合です。 IMHO、答えはノーです。エラーハンドラ以外の分岐はありません。これは、単にブラウザを使用する場合のように、外部からではなく他のレベルでのテストを正当化するには単純すぎます。 – oligofren

+0

アドバイスをいただき、ありがとうございます! – makory

+0

@oligofrenこれは主観的です。私は完全にビューの構造をテストすることは気にしませんが、おそらく '{data:posts}'がビューに渡されると主張します。たとえば、ビューに反復ロジックがあるとしたら、ここで簡単にテストできます。 – Drumbeg

答えて

0

私はモカ/チャイとは対照的に、テープを使用していますが、私のアプローチはあなたを助けるかもしれません。

回答には、私が期待している文章がと記載されています。

test('Post /auth/login renders an error raised by the api service', (t) => { 
    let spy = sinon.spy(); 
    let mock = sinon.stub(api, 'doLogin') 
    .resolves({dataForView: 'great success'}); 

    request(app) 
    .post('/auth/login') 
    .expect(200) 
    .end((err, res) => { 
     t.ok(res.text.includes('great success')); 
     t.end(); 

     mock.restore(); 
    }); 
}); 

キーパーツはt.ok(res.text.includes('great success'));です。レンダリングコールに渡されたデータが実際に応答で終わってしまうだけで、私の全体のビューが期待どおりにレンダリングされていると主張するのは煩わしいことではありません。

関連する問題