2017-06-21 113 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

你很喜歡單元測試,但更重要的問題是單元測試是否合理。恕我直言,答案是否定的。沒有分支 - 除了錯誤處理程序。這太簡單了,無法在其他任何級別上進行測試,例如只使用瀏覽器。 – 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'));。我不打擾地說,我的整個視圖都按預期呈現,只是我傳遞給渲染調用的任何數據實際上都以響應結束。