factori-imp

Crates.iofactori-imp
lib.rsfactori-imp
version0.9.3
sourcesrc
created_at2024-09-01 11:44:45.074106
updated_at2024-10-01 11:42:03.215706
descriptionfactori-imp(roved), a factory library for Rust, inspired by FactoryBot. 🤖
homepage
repositoryhttps://github.com/GriffinHeart/factori-imp
max_upload_size
id1359546
size25,252
Hugo Almeida (GriffinHeart)

documentation

README

factori-imp(roved)

A testing factory library for Rust, inspired by:

A fork of mjkillough/factori library, to add additional features.

factori-imp(roved) makes it easy to instantiate your test objects/fixtures in tests while providing an ergonomic syntax for defining how they are instantiated.

factori-imp works on stable Rust >=1.45.

Differences with factori

  • Transient attributes as first class citizens, see tests/transient.rs
  • Adds create_vec! macro, see tests/create_vec.rs
  • create* macros can be used in factory declarations, see tests/simple.rs:34
    • Contributed by @wuerges, thank you
  • Fixes all clippy warnings due to usage of the macros

Documentation

https://docs.rs/factori-imp/latest/factori_imp/

In place replacement for factori

You can use factori-imp without changing any code, in your Cargo.toml:

- factori = "1.1.0"
+ factori = { package = "factori-imp", version = "0.9.2" }

or just add it as a regular dependency and then rename the crate in your crate root:

extern crate factori-imp as factori;

Example

factori-imp(roved) provides three macros:

  • factori!, which defines a factory for a type
  • create! which instantiates it
  • create_vec! which instantiates many
#[macro_use]
extern crate factori;

pub struct Vehicle {
  number_wheels: u8,
  electric: bool,
}

factori!(Vehicle, {
  default {
    number_wheels = 4,
    electric = false,
  }

  mixin bike {
    number_wheels = 2,
  }
});

fn main() {
  let default = create!(Vehicle);
  assert_eq!(default.number_wheels, 4);
  assert_eq!(default.electric, false);

  // Its type is Vehicle, nothing fancy:
  let vehicle: Vehicle = default;

  let three_wheels = create!(Vehicle, number_wheels: 3);
  assert_eq!(three_wheels.number_wheels, 3);

  let electric_bike = create!(Vehicle, :bike, electric: true);
  assert_eq!(electric_bike.number_wheels, 2);
  assert_eq!(electric_bike.electric, true);

  // We can create many vehicles
  let many_motorcycles = create_vec!(Vehicle, 5, number_wheels: 2);
  assert_eq!(many_motorcycles.len(), 5);
}

More examples are available in the tests/ directory.

Testing

Install cargo-nextest

Run:

make test

License

MIT

Commit count: 72

cargo fmt