jestjs - JEST const 内的无效变量访问模拟
问题描述
经过大量研究后我问这个
我有这些文件
// connection.js
const mysql = require('mysql');
module.exports = mysql.getConnection();
// a.js
const connection = require('./connection');
function doQuery() {
const q = 'select * from table';
connection.query(q, (err, res) => {
... do some stuff
})
}
module.exports = doQuery;
当我用玩笑做一个测试时(删除不必要的东西以便更好地阅读)
// test.js
const jest = require('jest');
const a = require('./a.js');
const connection = {
query: (query, cb) => cb('error', null),
};
jest.mock('./connection.js', () => connection);
test('testing something', () => {
expect(a.doQuery).to.be.true //this is just an example
});
我收到下一个错误
The module factory of `jest.mock()` is not allowed to reference any out-of-scope variables.
Invalid variable access: connection
我尝试移动同一个文件夹中的文件,有相对路径,绝对路径,移动导入的顺序,我真的搞不定。
我真的不知道如何解决这个问题,而且我正在从 proxyquire 迁移到 jest,这就是我这样做的原因,我不能再使用 proxyquire 了。
解决方案
是的,嗯......我会回答我自己的未来问题。
问题是你不能jest.mock()
像我一样使用在函数外部声明的变量。
测试文件和模拟函数应该是这样的
解决方案 1
jest.mock('./connection.js', () => ({
query: (query, cb) => cb('ee', null),
}));
看我没有在函数const connection...
内使用任何变量()jest.mock
天空男孩
另外,感谢@skyboyer,我找到了另一个解决方案。
解决方案 2
使用jest.mock
前缀之外的名称mock*
const mockConnection = {
query: (query, cb) => cb('ee', null),
}
jest.mock('./connection.js',
推荐阅读
- javascript - Chrome 扩展:在后台 JS 中录制麦克风和扬声器
- ios - 有没有办法使用 SwiftUI 将事件添加到日历?
- google-apps-script - 使用谷歌电子表格中的旧数据快照生成 pdf 的脚本?
- go - 使用 Go 中的 eksctl
- windows - 抓取文本文件的内容并将部分文本文件设置为不同的变量
- python - Python 持久规则发布 json 函数和日期格式不起作用
- sql-server - 在 SQL Server 中查看当前 Azure 托管备份配置
- ruby - 如何在 Sinatra 中运行后台任务以避免 Heroku 30 秒超时
- python - 当我调用带参数的函数时,lambda 的目的是什么?
- javascript - 在异步函数中将新对象推送到 Mongoose 中的嵌套数组