模拟请求对象不能用于node.js中的testing

我有一个模块用于检查会话授权。 这是一个非常简单的脚本,读取会话,如果用户login,则返回true或false。这是我的脚本:

module.exports = { check: function(req) { return ( req.session && req.session.swipe && req.session.swipe === true ); } } 

check()函数将请求对象作为参数,然后读取会话对象。

我想用Jasminetesting它,以确保它返回正确的布尔值。 这是规范:

 var Auth = require('../controllers/auth'); describe("Authorization", function(){ it("should grant access", function(next) { var request = { session: { swipe: true } }; var value = Auth.check(request); expect(request.session.swipe).toBeDefined(); expect(value).toBe(true); }); it("should deny access", function(next) { var request = { session: { swipe: false } }; var value = Auth.check(request); expect(request.session.swipe).toBeDefined(); expect(value).toBe(false); }); }); 

当它与服务器一起运行时,请求对象是通过express生成的,但是在testing中我只想用sessionvariables创build一个模拟对象。 当我运行testing时,茉莉花输出以下内容: 茉莉花输出

我不知道问题在哪里,但我想这是与请求对象。

这个问题有个简单的解决scheme。 或者在传递给它的每个函数的结尾调用next(),或者传递一个没有参数的函数。 这将工作:

 var Auth = require('./con'); describe("Authorization", function(){ it("should grant access", function(next) { var request = { session: { swipe: true } }; var value = Auth.check(request); expect(request.session.swipe).toBeDefined(); expect(value).toBe(true); next(); // <----------- added next() }); it("should deny access", function(next) { var request = { session: { swipe: false } }; var value = Auth.check(request); expect(request.session.swipe).toBeDefined(); expect(value).toBe(false); next() // <----------- added next() }); }); 

以及这个

 var Auth = require('./con'); describe("Authorization", function(){ it("should grant access", function() {// <----------- removed next var request = { session: { swipe: true } }; var value = Auth.check(request); expect(request.session.swipe).toBeDefined(); expect(value).toBe(true); }); it("should deny access", function() { // <----------- removed next var request = { session: { swipe: false } }; var value = Auth.check(request); expect(request.session.swipe).toBeDefined(); expect(value).toBe(false); }); });