Застрял во время тестирования аутентификации с использованием nock и mocha - PullRequest
0 голосов
/ 17 февраля 2019

Я пишу модульные тесты для моего приложения, которые выполняют сторонние вызовы API.Я использую nock, чтобы высмеивать вызовы API.API использует базовую аутентификацию с использованием имени пользователя и пароля.

Здесь приведен модульный тест для аутентификации пользователя, а затем возврата ответа.

describe('Authentication tests', () => {

    it('Authenticates user', (done) => {

        nock('<MY_URL>')
            .get('/api/now/table/test_table/test_sys_id')
            .basicAuth({user: 'user', pass: 'pass'})
            .reply(200, {'a': 'b'});

        let snowClient = require('../Client');
        snowClient = new snowClient('<MY_URL>', 'user', 'pass', 'application/json', 'application/json');      

        snowClient.getSingleRecord('test_table', 'test_sys_id', (response) => {
            console.log(response);
            expect(typeof response).to.be.a('string');
            // expect(JSON.parse(response).a).to.equal('b');
            done();
        });
    });
});

Но когда я запускаю этот тест, nock выдает следующую ошибку:

Error: Nock: No match for request {
  "method": "GET",
  "url": "<MY_URL>/api/now/table/test_table/test_sys_id",
  "headers": {
    "accept": "application/json",
    "content-type": "application/json",
    "host": "<MY_URL>"
  }
}

Но когда я удаляю .basicAuth() из nock, он работает правильно.Что мне здесь не хватает?Это правильный метод для проверки подлинности вызовов API с использованием nock?

РЕДАКТИРОВАТЬ:

Вот код getSingleRecord:

getSingleRecord(table, sysId, callback){
    new Promise((resolve, reject) => {
        var requestParams = utils.setRequestParamsWithoutBody(this.headers, 
                                                                this.auth,
                                                                'GET', 
                                                                utils.URLBuilder(this.instance, this.namespace, this.apiName, table, sysId));

        request(requestParams, (err, res) => {
            var errorMessage = this._handleErrors(res, err);
            if (errorMessage){
                return reject(errorMessage);
            }
            resolve(res.body);
        });
    }).then((response) => {
        callback(response);
    }).catch((error) => {
        callback(error);
    });
}

1 Ответ

0 голосов
/ 18 февраля 2019

Я думаю, что вы не должны использовать nock в нем, должны использовать его в предисловии в рамках описания, как я, я не проверял это, я только изучил это и думаю, что это должно работать так.

describe('Authentication tests', () => {
let MY_URL = 'you url'

  beforeEach(() => {
    nock(MY_URL)
          .get('/api/now/table/test_table/test_sys_id')
          .basicAuth({user: 'user', pass: 'pass'})
          .reply(200, {'a': 'b'});
  });
  it('Authenticates user', (done) => {
      let snowClient = require('../Client');
      snowClient = new snowClient(MY_URL, 'user', 'pass', 'application/json', 'application/json');      

      snowClient.getSingleRecord('test_table', 'test_sys_id', (response) => {
          console.log(response);
          expect(typeof response).to.be.a('string');
          // expect(JSON.parse(response).a).to.equal('b');
          done();
      });
  });
});
...