๐Ÿณ Test-Containers for Quick Magento Development

January 7, 2025 ยท View on GitHub

Docker Build Rust Build

This package simplifies the process of automated testing with real database and search engine

โœจ Features

  • ๐Ÿ“ฆ Pre-configured database and search containers: Instantly spin up containers with ready-to-use Magento data
  • โš™๏ธ Easy setup and use: Use Rust package to automatically discard container after tests
  • ๐ŸŽฏ Blazingly Fast: Container takes only few seconds to start, so you can focus on testing instead of waiting for db initialization

๐Ÿ“‹ Requirements

  • ๐Ÿณ Docker: Ensure Docker is installed and operational on your system.

๐Ÿ“ฆ Available images

All the available Docker image version can be found in build repository EcomDev/testcontainer-magento-data

Installation

Use cargo with --dev flag to add it as dependency for your tests

cargo add --dev testcontainers-magento-data

Examples

MySQL container

Run queries against Magento database build with sample data

use sqlx::MySqlPool;
use testcontainers_magento_data::runners::AsyncRunner;
use testcontainers_magento_data::core::ImageBuilder;
use testcontainers_magento_data::images::{DbConnection, DbContainer};

#[tokio::test]
async fn starts_container_with_sample_data() {
    let container = DbContainer::mariadb()
        .with_sample_data()
        .with_version("2.4.7-p2")
        .start()
        .await
        .unwrap();

    let connection = MySqlPool::connect(&container.connection_url().await.unwrap())
        .await
        .unwrap();

    let total: i64 = sqlx::query_scalar("SELECT COUNT(*) FROM catalog_product_entity")
        .fetch_one(&connection)
        .await
        .unwrap();

    assert_eq!(total, 2040);
}

๐Ÿ“œ License

This project is licensed under the MIT License.

See the LICENSE file for more details.