簡體   English   中英

使用mocha測試類中函數內的變量

[英]testing variable within the function in class using mocha

我需要在TASK類的pullPackage()函數中測試url變量的值。

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);
        });
      });
    });
  }
}

我正在用Mocha和Chai來做這件事。 我有兩個測試這個函數,檢查變量和promise。 第二個測試按預期運行,但第一個總是返回失敗並出現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;
    }));
  });
});

檢查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;
    }));
  });
});

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM