ryanb/mustard
{ "createdAt": "2012-12-06T22:05:40Z", "defaultBranch": "master", "description": "Simple \"must\" expectations for tests and specs in Ruby.", "fullName": "ryanb/mustard", "homepage": "", "language": "Ruby", "name": "mustard", "pushedAt": "2021-12-11T22:08:35Z", "stargazersCount": 144, "topics": [], "updatedAt": "2025-08-22T10:05:01Z", "url": "https://github.com/ryanb/mustard"}Unmaintained
Section titled “Unmaintained”The Mustard gem is no longer maintained. Feel free to fork this project.
Mustard
Section titled “Mustard”Please, pass the mustard!
An expectation library that adds “must” and “must_not” which can have matchers called on them. Comes with a default set of matchers, and additional matchers can be easily added. Works with RSpec, MiniTest, and Test::Unit. Requires Ruby 1.9 or greater.
This project is based on ideas presented in this gist. There I explain some of my issues with existing expectation interfaces.
Installation
Section titled “Installation”Add this line to your application’s Gemfile and run the bundle command.
gem 'mustard', group: :testInside of a test or spec, call must or must_not on any object followed by a matcher. Some matchers have aliases.
5.must.equal 55.must_not.eq 4
5.must.be_greater_than 45.must.be_gt 4
[].must.be :empty? # calls the method to see if it's truerecord.must.be :valid?5.must.be :between?, 6, 7# raises Mustard::Failure: expected 5 to be between 6 and 7
-> { 5.bad_call }.must.raise_exception(NoMethodError)See the source code for a complete list of matchers and their behavior.
Adding Matchers
Section titled “Adding Matchers”Matchers are very easy to add. If a block is passed, it will be executed in the context of the subject.
Mustard.matcher(:be_empty) { empty? }[].must.be_empty?[1].must.be_empty? # fail: expected [1] to be emptyAlternatively, you can pass a class to fully customize the behavior.
class BetweenMatcher # Subject is always passed, any extra arguments will be added after def initialize(subject, min, max) @subject = subject @min = min @max = max end
def match? @subject.between? @min, @max end
def failure_message "expected #{@subject.inspect} to be between #{@min.inspect} and #{@max.inspect}." end
def negative_failure_message "expected #{@subject.inspect} to not be between #{@min.inspect} and #{@max.inspect}." endend
Mustard.matcher(:be_between, BetweenMatcher)5.must.be_between(5, 7)Disabling Other Matchers
Section titled “Disabling Other Matchers”For RSpec, add this line to your spec_helper.rb if you want to disable other matchers.
config.expect_with MustardFor MiniTest::Spec, add this line to your test_helper.rb if you want to disable existing matchers.
ENV["MT_NO_EXPECTATIONS"] = "true"Contributing
Section titled “Contributing”- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Make changes and ensure they pass with
rspec . - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request