[英]Unit Testing w/ Sinon: How do I test a variable inside of a Callback?
我正在與Sinon進行單元測試,至少要設法使某些東西通過並且運氣不佳。 我無法在網上找到任何東西。
我有2個問題:
1)我試圖得到一個簡單的答復,但未能說spy
是false
。 當我登錄時,它說的是true
。
2)我要測試回調函數中的模板是否等於“ New Title”。 我無法弄清楚如何將req,res和next傳遞到router.get中
const express = require('express'), router = express.Router();
router.get('/', (req, res, next) => {
var template = {
title: req.title,
item: req.item,
description: 'N/A'
};
res.render('index', template);
module.exports = router;
});
const router = require('./router');
var res = {};
var req = {
title: 'New Title',
item: 'Blank Item'
};
var template = {
title: req.title,
item: req.item,
description: 'N/A'
};
it('1) should call the response', ()=>{
var spy = sinon.spy(route, 'get');
route.get('/', ()=>{});
console.log(spy.calledOnce); // equals true
assert(spy.calledOnce).toBeTruthy();
spy.restore();
});
it('2) should return a status 200', ()=>{
var stub = sinon.stub().yield([req, res, next]);
route.get('/', stub); // main problem
assert.equal(200, res.statusCode);
stub.restore();
});
我想訪問路由處理程序,以便進行進一步的測試。 在這種情況下,在哪里以及如何實施路由處理?
通常,用於路由的Express應用最好與集成測試而不是您嘗試進行的單元測試一起測試。 可以將Supertest用作庫。
我們可以做的另一項改進是將生成模板的邏輯分離到另一個文件中。 對於此服務,我們可以對其進行單元測試。 可以使用mocha或jest 。
例:
const request = require('supertest');
const express = require('express');
const service = require('./service'); // our new service file
const app = express();
app.get('/', function(req, res) {
const template = service.getTemplate(req);
res.render('index', template);
});
// integration test, ideally must be separated into a test file e.g. app-integration-test.js
request(app)
.get('/')
.expect('Content-Type', /json/)
.expect('Content-Length', '15')
.expect(200)
.end(function(err, res) {
if (err) throw err;
});
// service.js
function getTemplate(req, res) {
return {
title: req.title,
item: req.item,
description: 'N/A'
};
}
// service-unit-test.js
describe('service test', function() {
it('returns template correctly', function() {
const req = {
title: 'someone',
item: 'my item',
}
const template = service.getTemplate(req);
expect(template).to.eql({
title: 'someone',
item: 'my item',
description: 'N/A'
})
})
})
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.