node.js - 开玩笑 - 多次使用不同的测试设置运行一个测试模块
问题描述
有一个应用程序正在运行NodeJS
。它的架构灵感来自 Oncle Bob 的书:“清洁架构”。一切都很完美,但是:目前我们对所有使用 fake-DB 运行的模块进行了单元测试。我们希望以这种方式进行集成测试:使用相同的测试(与我们用于单元测试的测试一样)进行集成测试,但“注入”真实的数据库。我怎么能这样做jest
呢?我不想复制所有单元测试代码并创建代码重复(测试设置除外)。
单元测试实际上是这样的:
const DB = require("FakeDB");
let test_description = "unit-testing with FakeDB";
describe(`${test_description}`, () => {
let db;
beforeAll(() => {
const cnf = create_config("test");
db = new DB(cnf);
});
afterAll( () => {
db.connection_close();
});
test("should save entity to DB", () => {
try {
// execute: save entity to DB
} catch (err) {
console.error(err);
}
})
})
我怎么能注入另一个数据库,例如require("PostgresDB")
?
解决方案
假设我们有两个具有相同功能的模块 add.js 和 add_copy.js。
function add (a, b) {
return a + b
}
module.exports = {add}
安装 dotenvnpm install dotenv
创建 .evn 文件
DB=One
虚拟规格文件
let add;
if (process.env.DB == "One"){
add = require('./add.js');
}
if (process.env.DB == "Two"){
add = require('./add_copy.js');
}
let test_description = "unit-testing with FakeDB";
describe(`${test_description}`, () => {
beforeAll(() => {
});
afterAll( () => {
});
test("some test", () => {
console.log(add.add(2,3));
})
})
本示例的 jest.config.js
require('dotenv').config();
module.exports = {
verbose: true,
};
这里的 'add' 根据 .evn 文件中提供的 'DB' 值进行更改。
你也可以试试类似的
let MyDB;
if (process.env.DB == "Fake"){
MyDB= require("FakeDB")
}
if (process.env.DB == "Real"){
MyDB= require("PostgresDB")
}
推荐阅读
- laravel - 当用户在 Laravel 5.6 中输入无效凭据时,如何在登录模式表单上显示错误?
- java - 调用 Java 过程时 Oracle ORA-01722
- google-apps-script - 如何获取脚本以将 2 个变量的总和添加到表格中的第三列
- android - 如何使用导航类型安全参数插件将 Parcelable 类型的对象传递给片段
- python - 如何最好地实现链接变量?
- python - 如何过滤 sys.stdout?
- php - Array Combination need as like below
- xamarin - xamarin 复数 电磁学
- node.js - 为什么在 expressjs 中的 POST 请求上清空 req.body?
- bash - 脚本在本地运行但在 Jenkins 上失败(得到 SIGTERM,退出)