javascript - 使用 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 来执行此操作。我对这个函数有两个测试,检查变量和承诺。第二个测试按预期运行,但第一个总是返回失败,并显示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;
}));
});
});
希望能帮助到你
推荐阅读
- azure-ad-b2c - 自定义重置密码屏幕
- database - 具有多个集合的容器种子中的 MongoDb
- android - IntentService 中的强制停止循环功能
- multithreading - 从 Go 应用程序中的线程低级 C/C++ 代码层调用 Go 回调
- asp.net-web-api - Web Api 返回 500 内部服务器错误
- java - 从 Java Stream 生成的 Optional 中消除额外的 isPresent() 调用
- bash - pg_restore 忽略 .pgpass 和 PGPASSWORD 环境变量
- html - 将 div 居中在另一个 div 中时,边距自动不起作用
- c# - 在施工时分配给全部财产
- hibernate - Group By JPQL后转换成数组