我正在使用frisby.js
自动执行REST API测试。现在,我有一个REST API函数,必须在几乎所有其他REST API端点之前调用它。通过此REST API调用,我创建了一个新的用户会话,并获得了生成的令牌,几乎在以后的每个调用中,都必须在标头中使用该令牌。因此,我想避免冗余的源代码,并且我不想在每个实现的测试用例之前实现此HTTP调用。因此,我想找到一个正在运行的解决方案,以通过此调用创建一个函数,并在测试中仅调用此帮助器函数。
当前,我创建了一个具有以下功能的restHelper.js
:
'use strict';
const frisby = require('frisby');
var createNewSession = (username, password, callback) => {
frisby.post(process.env.BASE_URL + '/api/auth', {
'username': username,
'password': password,
}).expect('status', 200)
.then(function(result) {
callback(result.json.token);
});
};
module.exports = {
createNewSession
};
在我的测试中,我使用了该函数,并且可以在回调函数中对其进行处理:
describe(process.env.BASE_URL + '/api/auth', () => {
describe('GET /auth - Status 200 (Ok)', () => {
it('get an existing session for user ' + adminUser1.username, () => {
restHelper.createNewSession(adminUser1.username, adminUser1.password, function(token) {
return frisby
.setup({
request: {
headers: {
'my-token': token
}
}
})
.get(process.env.BASE_URL + '/api/auth')//.expect('status', 200)
.expect('status', 200)
.then(function (res) {
assert.isNotNull(res.json.token);
});
});
});
});
});
通常它可以正常工作,但是当我通过Jest
运行测试时,我收到一个错误,指出仍然在运行异步进程:
./node_modules/.bin/jest example_frisby.js --config=./jest.conf.js
PASS rest/tests/example_frisby.js
GET /auth - Status 200 (Ok)
✓ get an existing session for user 000000001 (32ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 1.871s, estimated 2s
Ran all test suites matching /example_frisby.js/i.
Jest did not exit one second after the test run has completed.
This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.
那么,我该如何解决这个问题?还是有更好更好的解决方案来使用frisby.js
创建可重用的HTTP调用函数?