тестирование переменной внутри функции в классе с помощью mocha - PullRequest
0 голосов
/ 04 июня 2019

Мне нужно проверить значение переменной url в функции pullPackage () в классе TASK.

class TASK {
  constructor(taskData, done) {
    //some code
  }

  // Generic Setup

  pullPackage() {
    return new Promise((resolve, reject) => {
      fs.emptydir(this.taskDir, (err) => {
        if (err) return reject(err);
        const git = require('simple-git')(this.taskDir);

        let url = '';
        console.log(process.env.NODE_ENV);
        if (process.env.NODE_ENV === 'test') {
          // url = 'ssh://testuser@127.0.0.1:4000/testuser/test-repo-1.git'; // make this match the below format
          url = '/git/testuser/test-repo-1';
        } else {
          const gitAddress = new URL(config.config.GIT_ADDRESS);
          url = `${gitAddress.protocol}//runner:${this.taskData.gitJWT}@${gitAddress.hostname}:${gitAddress.port}${this.taskData.repo}.git`;
        }
        // console.log(url);
        // const url = `${gitAddress.protocol}//runner:${this.taskData.gitJWT}@${gitAddress.hostname}:${gitAddress.port}${this.taskData.repo}.git`;
        this.logger.log('Cloning from', url);
        return git.clone(url, 'repo', (cloneErr) => {
          if (cloneErr) return reject(cloneErr);
          // console.log(url);
          // console.log(resolve);
          return resolve(true);
        });
      });
    });
  }
}

Я использую Мокко и Чай, чтобы сделать это. У меня есть два теста для этой функции, чтобы проверить переменную и обещание. Второй тест выполняется, как и ожидалось, но первый всегда возвращает ошибку с AssertionError: expected undefined not to be undefined. Я думаю, проблема в том, как я получаю доступ к переменной во время тестирования. В настоящее время я делаю это так: expect(result.url).to.not.be.undefined; Правильно ли я это делаю?

describe('Test MenloLab Runner - Task Class', () => {
  describe('Pull Package', () => {
    it('Check URL constant.', () => task.pullPackage().then((result) => {
      expect(result.url).to.not.be.undefined; // adjust the access method
    }));

    it('It should pull package from GIT.', () => task.pullPackage().then((result) => {
      expect(result).to.be.true;
    }));
  });
});

1 Ответ

0 голосов
/ 05 июня 2019

Обходной путь для проверки URL можно сделать, следя за методом git.clone. Для этого нам нужно использовать Sinon

Я не проверял ваш код, но даю подсказку по приведенному ниже решению:

const sinon = require('sinon');
const git = require('simple-git');

describe('Test MenloLab Runner - Task Class', () => {
  describe('Pull Package', () => {
    it('Check URL constant.', () => {
      return task.pullPackage().then((result) => {
        sinon.spy(git, 'clone'); // spying on git.clone method

        expect(result.url).to.not.be.undefined; // adjust the access method

        const expectedUrl = 'my-expected-not-undefined-url';
        sinon.assertCalledWith(git.clone, expectedUrl); // we check whether git.clone is called with not undefined URL
       });
    });

    it('It should pull package from GIT.', () => task.pullPackage().then((result) => {
      expect(result).to.be.true;
    }));
  });
});

Надеюсь, это поможет

...