1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
require 'spec_helper'
describe "expect(...).to have_sym(*args)" do
it_behaves_like "an RSpec matcher", :valid_value => { :a => 1 },
:invalid_value => {} do
let(:matcher) { have_key(:a) }
end
it "passes if #has_sym?(*args) returns true" do
expect({:a => "A"}).to have_key(:a)
end
it "fails if #has_sym?(*args) returns false" do
expect {
expect({:b => "B"}).to have_key(:a)
}.to fail_with("expected #has_key?(:a) to return true, got false")
end
it 'does not include any args in the failure message if no args were given to the matcher' do
o = Object.new
def o.has_some_stuff?; false; end
expect {
expect(o).to have_some_stuff
}.to fail_with("expected #has_some_stuff? to return true, got false")
end
it 'includes multiple args in the failure message if multiple args were given to the matcher' do
o = Object.new
def o.has_some_stuff?(*_); false; end
expect {
expect(o).to have_some_stuff(:a, 7, "foo")
}.to fail_with('expected #has_some_stuff?(:a, 7, "foo") to return true, got false')
end
it "fails if #has_sym?(*args) returns nil" do
klass = Class.new do
def has_foo?
end
end
expect {
expect(klass.new).to have_foo
}.to fail_with(/expected #has_foo.* to return true, got false/)
end
it "fails if target does not respond to #has_sym?" do
expect {
expect(Object.new).to have_key(:a)
}.to raise_error(NoMethodError)
end
it "reraises an exception thrown in #has_sym?(*args)" do
o = Object.new
def o.has_sym?(*args)
raise "Funky exception"
end
expect {
expect(o).to have_sym(:foo)
}.to raise_error("Funky exception")
end
end
describe "expect(...).not_to have_sym(*args)" do
it "passes if #has_sym?(*args) returns false" do
expect({:a => "A"}).not_to have_key(:b)
end
it "passes if #has_sym?(*args) returns nil" do
klass = Class.new do
def has_foo?
end
end
expect(klass.new).not_to have_foo
end
it "fails if #has_sym?(*args) returns true" do
expect {
expect({:a => "A"}).not_to have_key(:a)
}.to fail_with("expected #has_key?(:a) to return false, got true")
end
it "fails if target does not respond to #has_sym?" do
expect {
expect(Object.new).to have_key(:a)
}.to raise_error(NoMethodError)
end
it "reraises an exception thrown in #has_sym?(*args)" do
o = Object.new
def o.has_sym?(*args)
raise "Funky exception"
end
expect {
expect(o).not_to have_sym(:foo)
}.to raise_error("Funky exception")
end
it 'does not include any args in the failure message if no args were given to the matcher' do
o = Object.new
def o.has_some_stuff?; true; end
expect {
expect(o).not_to have_some_stuff
}.to fail_with("expected #has_some_stuff? to return false, got true")
end
it 'includes multiple args in the failure message if multiple args were given to the matcher' do
o = Object.new
def o.has_some_stuff?(*_); true; end
expect {
expect(o).not_to have_some_stuff(:a, 7, "foo")
}.to fail_with('expected #has_some_stuff?(:a, 7, "foo") to return false, got true')
end
end
describe "has" do
it "works when the target implements #send" do
o = {:a => "A"}
def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
expect {
expect(o).to have_key(:a)
}.not_to raise_error
end
end
|