如何在测试中手动设置变量的值(开玩笑)?
How do I manually set the value of a variable in a test (jest)?
app.test.js
我的笑话文件中有以下代码:
'use strict';
const request = require('supertest');
const app = require('./app');
//
function serialise (obj) {
return Object.keys(obj).map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`).join('&');
}
describe('Test other /', () => {
test('POST /example succeeds (200 OK) if checkboxes are ticked', () => {
const toSend = {
check: 'Spiderman'
};
return request(app).post('/example')
.send(serialise(toSend))
.expect(200);
});
});
到目前为止测试没有问题,但我想在测试期间设置一个名为 Identifier
的变量(在我的 node.js 文件中)等于值 1
特定的测试。我怎样才能通过玩笑做到这一点?
(我试着阅读开玩笑的文档并查看了关于 SO 的类似问题,但无法找到更具体的答案)。
app.js
node.js /示例POST 路线:
app.post('/example', (req, res) => {
var checked = req.body.check;
var Identifier = req.app.get('identifier'); // Accessed like a global variable (value set in previous block of code).
...
});
您可以使用 app.set(name, value) 来执行此操作。例如
app.js
:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.post('/example', (req, res) => {
const checked = req.body.check;
const Identifier = req.app.get('identifier');
console.log('Identifier:', Identifier);
res.sendStatus(200);
});
module.exports = app;
app.test.js
:
const request = require('supertest');
const app = require('./app');
function serialise(obj) {
return Object.keys(obj)
.map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`)
.join('&');
}
describe('Test other /', () => {
test('POST /example succeeds (200 OK) if checkboxes are ticked', () => {
const toSend = {
check: 'Spiderman',
};
return request(app).post('/example').send(serialise(toSend)).expect(200);
});
test('POST /example succeeds (200 OK) if Identifier is set', () => {
const toSend = {
check: 'Spiderman',
};
app.set('identifier', 1);
return request(app).post('/example').send(serialise(toSend)).expect(200);
});
});
集成测试结果:
PASS Whosebug/61373586/app.test.js (12.805s)
Test other /
✓ POST /example succeeds (200 OK) if checkboxes are ticked (159ms)
✓ POST /example succeeds (200 OK) if Identifier is set (9ms)
console.log Whosebug/61373586/app.js:9
Identifier: undefined
console.log Whosebug/61373586/app.js:9
Identifier: 1
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 14.642s
app.test.js
我的笑话文件中有以下代码:
'use strict';
const request = require('supertest');
const app = require('./app');
//
function serialise (obj) {
return Object.keys(obj).map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`).join('&');
}
describe('Test other /', () => {
test('POST /example succeeds (200 OK) if checkboxes are ticked', () => {
const toSend = {
check: 'Spiderman'
};
return request(app).post('/example')
.send(serialise(toSend))
.expect(200);
});
});
到目前为止测试没有问题,但我想在测试期间设置一个名为 Identifier
的变量(在我的 node.js 文件中)等于值 1
特定的测试。我怎样才能通过玩笑做到这一点?
(我试着阅读开玩笑的文档并查看了关于 SO 的类似问题,但无法找到更具体的答案)。
app.js
node.js /示例POST 路线:
app.post('/example', (req, res) => {
var checked = req.body.check;
var Identifier = req.app.get('identifier'); // Accessed like a global variable (value set in previous block of code).
...
});
您可以使用 app.set(name, value) 来执行此操作。例如
app.js
:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.post('/example', (req, res) => {
const checked = req.body.check;
const Identifier = req.app.get('identifier');
console.log('Identifier:', Identifier);
res.sendStatus(200);
});
module.exports = app;
app.test.js
:
const request = require('supertest');
const app = require('./app');
function serialise(obj) {
return Object.keys(obj)
.map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`)
.join('&');
}
describe('Test other /', () => {
test('POST /example succeeds (200 OK) if checkboxes are ticked', () => {
const toSend = {
check: 'Spiderman',
};
return request(app).post('/example').send(serialise(toSend)).expect(200);
});
test('POST /example succeeds (200 OK) if Identifier is set', () => {
const toSend = {
check: 'Spiderman',
};
app.set('identifier', 1);
return request(app).post('/example').send(serialise(toSend)).expect(200);
});
});
集成测试结果:
PASS Whosebug/61373586/app.test.js (12.805s)
Test other /
✓ POST /example succeeds (200 OK) if checkboxes are ticked (159ms)
✓ POST /example succeeds (200 OK) if Identifier is set (9ms)
console.log Whosebug/61373586/app.js:9
Identifier: undefined
console.log Whosebug/61373586/app.js:9
Identifier: 1
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 14.642s