我正在使用supertest测试我的API
我想检查我的CSRF令牌保护是否有效,然后为其他测试禁用它.
为此我设置NODE_ENV
为test
或not_test
app.js
var csrf = require('csurf'); var app = express(); if (process.env.NODE_ENV !== 'test') { app.use(csrf({ cookie: true })); app.use(function(req, res, next) { res.cookie('XSRF-TOKEN', req.csrfToken()); return next(); }); }
测试CSRF
process.env.NODE_ENV = 'not_test'; var app = require("app.js"); var request = require('supertest')(app); var testAccount = { "login": "test", "pass": "test" }; describe('CSRF protection', function() { it('On /login', function(done){ request .post('/login') .send(testAccount) .expect(403, done); }); });
测试登录 NODE_ENV现在正在测试
process.env.NODE_ENV = 'test'; var app = require("app.js"); var request = require('supertest').agent(app); var testAccount = { "login": "test", "pass": "test" }; describe('API Admin roads', function() { before(function (done) { request .post('/login') .send(testAccount) .end(done); }); it('/api/admin/groups/', function(done){ request .get('/api/admin/groups/') .expect(200, done); }); });
问题是,只有第一个process.env.NODE_ENV
被考虑在内,如果我把它设置为not_test
然后test
我将仍然处于not_test
模式.