如何使用frisby.js实现可重用的REST API调用函数

时间:2018-06-21 19:07:16

标签: node.js rest jestjs frisby.js

我正在使用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调用函数?

0 个答案:

没有答案