首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jest -使用不同的测试设置多次运行一个测试模块

jest -使用不同的测试设置多次运行一个测试模块
EN

Stack Overflow用户
提问于 2021-01-19 06:03:20
回答 2查看 478关注 0票数 1

有一个应用程序在NodeJS上运行。它的架构灵感来自Oncle Bob的书:"Clean Architecture“。一切都运行得很完美,但是:目前我们已经对所有使用fake-DB运行的模块进行了单元测试。我们希望以这种方式进行集成测试:对集成测试使用相同的测试(与我们用于单元测试的测试相同),但“注入”真正的DB。我怎么能用jest做到这一点呢?我不想复制所有的单元测试代码并创建重复的代码(除了test-setup)。

单元测试实际上是这样的:

代码语言:javascript
复制
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")

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-22 15:19:20

假设我们有两个具有相同功能的模块add.js & add_copy.js。

代码语言:javascript
复制
function add (a, b) {
    return a + b
  }

module.exports = {add}

安装dotenv npm install dotenv

创建.evn文件

代码语言:javascript
复制
DB=One

虚拟等级库文件

代码语言:javascript
复制
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

代码语言:javascript
复制
require('dotenv').config();
module.exports = {
    verbose: true,
  };

这里的“add”是根据.evn文件中提供的“DB”值进行更改的。

你也可以尝试类似的东西。

代码语言:javascript
复制
let MyDB;
if (process.env.DB == "Fake"){
     MyDB= require("FakeDB")
}
if (process.env.DB == "Real"){
     MyDB= require("PostgresDB")
}
票数 1
EN

Stack Overflow用户

发布于 2021-01-19 10:39:52

您首先需要分解一段代码,该代码设置运行测试的对象。完成此操作后,您可以运行两次测试:一次针对假dB,另一次针对真正的dB。

这是我想不到的,但它可能就是你要找的。不过,你也许可以做更多的事情来清理它:

代码语言:javascript
复制
const FakeDB = require("FakeDB")
const RealDB = require("PostgresDB")
describe('unit testing with FakeDB', () => {
   let db;

    beforeAll(() => {
       const cnf = create_config("test");
        db = new FakeDB(cnf);
    });

    afterAll( () => {
        db.connection_close();
    });

    test("should save entity to DB", () => {
        myTest(db);
    })
})

describe('unit testing with RealDB', () => {
   let db;

    beforeAll(() => {
        const cnf = create_config("real");
        db = new RealDB(cnf);
    });

    afterAll( () => {
        db.connection_close();
    });

    test("should save entity to DB", () => {
        myTest(db);
    })
})
myTest(db) {
        try {
            // execute: save entity to DB 
        } catch (err) {
            console.error(err);
        }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65782656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档