Skip to content

afshinm/morq

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

morq Build Status

Write unit tests like humans

Install

cargo install morq

Morq Crate: https://crates.io/crates/morq

Grammar

Since we are using a macro here, you need to wrap the following rules in morq! macro.

Example:

morq!(
  expect(3).to.be.an(i32);
);

Chains

You use following chains to make the assertions more user friendly and readable.

  • to
  • be
  • have

Equal

expect(30).to.be.equal(10 * 3);
expect(3).to.be.equal(1 + 2);

Close

To compare two given float values

expect(3f32).to.be.close(3.0001f32);
expect(3f32).to.be.close_to(3.0001f32);

Not

Negates the chain.

expect(30).to.not.be.equal(10);
expect(3).to.not.be.equal(1);
expect(vec![1, 2, 3]).to.not.be.a(Vec<char>);

A / An

To check the data type.

expect(30).to.be.an(i32);
expect("hola".to_string()).to.not.be.a(f32);
expect(vec![1, 2, 3]).to.be.a(Vec<i32>);

Empty

To check and see if the iterator is empty or not

expect(vec![1, 2, 3]).to.not.be.empty();
expect(0..2).to.not.be.empty();

LengthOf

To check the count of elements in an iterator

expect(vec![1, 2, 3]).to.not.have.length_of(1usize);
expect(0..3).to.have.length_of(3usize);

Contain

Given iterator must contain the element

expect(vec![1, 2, 3]).to.contain(2);
expect(vec![false, false]).to.not.contain(true);

Ok / Err

To check a Result enum

let res: Result<String, String> = Ok(format!("boo"));

morq!(
    expect(res).to.be.ok();
);
let res: Result<String, String> = Err(format!("boo"));

morq!(
    expect(res).to.be.err();
);

Of course, you can combine it with not:

let res: Result<String, String> = Err(format!("boo"));

morq!(
    expect(res).to.not.be.ok();
);

Roadmap

  • Adding more chain rules

  • Adding more assert (terminal)

  • Ability to add two or more asserts in one chain:

    expect("hello").to.be.equal("hello").and.not.be.a(i32);

FAQ

morq?

Means chicken in Farsi. Like a lazy chicken, you know.

Artwork: clipart-library.com

Author

Afshin Mehrabani

License

MIT

Inspired by http://chaijs.com and https://github.com/carllerche/hamcrest-rust

About

BDD/TDD assertion interface

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages