spec-opal/matchers_spec.rb
require 'spec_helper'
describe "be_truthy" do
it "passes with truthy values" do
expect(true).to be_truthy
expect(1.0).to be_truthy
expect([]).to be_truthy
end
it 'fails properly with truthy values' do
expect(false).to be_truthy
end
it "fails with falsey values" do
expect {
expect(false).to be_truthy
}.to raise_error(Exception)
expect {
expect(nil).to be_truthy
}.to raise_error(Exception)
end
end
describe "be_falsey" do
it "passes with falsey values" do
expect(false).to be_falsey
expect(nil).to be_falsey
end
it "fails with truthy values" do
expect {
expect(true).to be_falsey
}.to raise_error(Exception)
expect {
expect({}).to be_falsey
}.to raise_error(Exception)
end
end
describe "be_nil" do
it "passes when object is nil" do
expect(nil).to be_nil
end
it "fails with any other object" do
expect {
expect(false).to be_nil
}.to raise_error(Exception)
expect {
expect(:foo).to be_nil
}.to raise_error(Exception)
end
end
describe "be_kind_of" do
it "passes if actual is kind of expected class" do
expect("foo").to be_kind_of(String)
expect("foo").to_not be_kind_of(Numeric)
end
it "passes if actual is kind of superclass of expected class" do
expect([]).to be_kind_of(Object)
end
it "fails if expected is not a kind of expected" do
expect {
expect("foo").to be_kind_of(Integer)
}.to raise_error(Exception)
expect {
expect("foo").to_not be_kind_of(String)
}.to raise_error(Exception)
end
end
describe "eq" do
it "matches when actual == expected" do
expect(:foo).to eq(:foo)
end
it "does not match when actual != expected" do
expect(:foo).not_to eq(42)
end
it "fails if matcher does not match" do
expect {
expect(:foo).to eq(42)
}.to raise_error(Exception)
expect {
expect(:foo).not_to eq(:foo)
}.to raise_error(Exception)
end
end
describe "eql" do
it "matches when expected.eql?(actual)" do
expect(1).to eql(1)
end
it "does not match when !expected.eql?(actual)" do
expect(1).to_not eql(:foo)
end
it "fails if matcher does not match" do
expect {
expect(1).to eql(:bar)
}.to raise_error(Exception)
expect {
expect(2).to_not eql(2)
}.to raise_error(Exception)
end
end
describe "include" do
it "matches if actual includes expected" do
expect("foo").to include("f")
expect([:foo, :bar, :baz]).to include(:baz)
expect({ :yellow => 'lorry' }).to include(:yellow)
end
it "does not match if actual does not inlcude expected" do
expect("foo").to_not include("b")
expect([:foo, :bar, :baz]).to_not include(:kapow)
expect({ :yellow => 'lorry' }).to_not include(:red)
end
it "fails if matcher does not match" do
expect {
expect("bar").to include("z")
}.to raise_error(Exception)
end
end
describe "respond_to" do
it "matches if actual responds to sym" do
expect("foo").to respond_to(:upcase)
end
it "does not match if actual does not respond to sym" do
expect(Object.new).to_not respond_to(:upcase)
end
it "fails if actual does not respond to sym" do
expect {
expect(Object.new).to respond_to(:upcase)
}.to raise_error(Exception)
end
end
describe "match" do
it "matches if actual matches expected" do
expect("foobar").to match(/ar/)
expect("foobar").to match("oob")
end
it "does not match if actual does not match expected" do
expect("foobar").to_not match(/baz/)
expect("foobar").to_not match("woosh")
end
it "fails unless matcher matches" do
expect {
exprct("hello").to match(/world/)
}.to raise_error(Exception)
end
end
describe "operator ==" do
it "matches if actual == expected" do
"hello".should == "hello"
end
it "does not match when actual does not == expected" do
"hello".should_not == "world"
end
it "fails unless matcher matches" do
expect {
"hello".should == "world"
}.to raise_error(Exception)
end
end
class PredicateTest
def foo?
true
end
def bar?
false
end
end
describe "predicate matchers" do
it "works with positive expectations" do
expect(PredicateTest.new).to be_foo
end
it "work with negative expectations" do
expect(PredicateTest.new).to_not be_bar
end
end