测试容器
从 趋势醇/检测容器
免责声明
伪造的主要原因是先前的回购不再维持,导致
testcontainers API为已过时. 此外,我们需要支持多管多管多克
图像,在以后版本中支持 testcontainers-node。 。 。 .
测试时预置了套装容器 主要目的是在整合测试中使用任何数据库。 由于它使用道克图像,所以在集成测试中可以使用不同插件/配置的自定义数据库图像. 使用 测试容器-节点 在引擎盖下。 灵感来自 @shelf/jest-mongodb (英语)。 。 。 .
使用量
安装
应该安装在您的系统中 。 如果在CI管道内运行,见 财务问题。 。 。 .
npm install --save-dev @blueground/jest-testcontainers
编辑配置
在你身边 jest.config.js 添加工程为预设.
module.exports = {
preset: '@blueground/jest-testcontainers'
};
宣布要运行的容器
创建名为的文件 jest-testcontainers-config.js 并把它放在你的项目的根,你运行的地方 npm 测试如果您想把这个文件放在别的地方,你可以使用 (原始内容存档于2019-10-21) (中文(中国大陆) ). JEST TESTCONERS CONFIG PATH 用于定义相对路径或绝对路径的环境变量。 样本配置文件;
module.exports = {
redis: {
image: 'redis',
tag: 'alpine3.12',
ports: [6379],
env: {
EXAMPLE: 'env',
},
wait: {
type: 'text',
text: 'Ready to accept connections'
}
},
// more: {
// image: 'any-docker-image', // postgresql, mongodb, neo4j etc.
// ports: [1234, 4567], // ports to make accessible in tests
// },
};
连接到容器
每个容器IP和Port信息都被注册到全局变量中,供您测试使用.
const redis = require('redis');
const { promisify } = require('util');
describe('testcontainers example suite', () => {
let redisClient;
beforeAll(() => {
const redisConnectionURI = `redis://${global.__TESTCONTAINERS_REDIS_IP__}:${global.__TESTCONTAINERS_REDIS_PORT_6379__}`;
redisClient = redis.createClient(redisConnectionURI);
// if you have declared multiple containers, they will be available to access as well. e.g.
// `global.__TESTCONTAINERS_${CONFIG_KEY}_IP__`
// `global.__TESTCONTAINERS_${CONFIG_KEY}_PORT_${CONFIG_PORT}__`
});
afterAll(() => {
redisClient.quit();
});
it('write should be ok', async () => {
// Arrange
const setAsync = promisify(redisClient.set).bind(redisClient);
// Act
const setResult = await setAsync('test', 73);
// Assert
expect(setResult).toEqual('OK');
});
});
文档
联合国 jest-testcontainers-config.js 可见于 DOC. m.d (英语)。 。 。 .
实例
- 例/01 - 基本内容 展示针对 Redis 的写作集成测试。 你用得着
npm run build && npm run example:redis命令可在本地运行此示例. - 例/ 02 类型script- redis 试验案例与例一相同. 然而使用Typescript而不是JavaScript. 你用得着
npm run build && npm run example:redis-typescript以本地操作此示例. - 实例/ 03- docker- 构成 与例1和例2相同的测试案例,然而使用多克编译来构建容器. 你用得着
npm run build && npm run example:docker-compose以本地操作此示例. - 延加/Nodejs-postgresql-测试容器 显示针对 PostgreSQL 的集成测试, 并使用 schema 迁移和 Typescription 。 您可以查看项目页面了解更多详情.
监视模式支持
如果 Jest 以监视模式启动, 则2. 0.0 版本的容器将不会停止 。 如果您的容器的启动时间( 如 Elasticsearch) 较慢, 则会大大提高开发生产率 。 这需要付出的代价是,你必须注意,容器会在表试死刑之间被再利用,而且你需要在钩后进行适当的清理.
如果您想要禁用此行为, 您可以设置 JEST_TESTCONTAINERS_RESTART_ON_WATCH 环境变量.
想知道当Jest退出时这些容器没有被停止时会发生什么 测试容器的叫声 我会照顾他们.
许可证
这个项目根据麻省理工学院的许可证颁发