RSpec 3 Expectations Cheat Sheet

A Programming › Ruby cheat sheet in English by mpicker0

Setting expectations in RSpec 3 specs

13,327 views 3,604 downloads 3 Apr 2015 History
4.7 avg · 2 ratings

nil, boolean, equality, type, regex matchers

expect(user).to be_nil

expect(foo.bar?).to be_truthy
expect(foo.bar?).to be_falsey

expect(user.id).to eq("foo")

expect(user).to be_a(FooApp::User)
expect(arr).to be_an(Array)

expect(user.id).to match(/foo/)
Using not_to instead of to reverses the condition.

Collection matchers

expect([1, 2, 3]).to include(2)

expect(request.headers).to include("X-Foo" => "bar", "X-Baz" => "qux")
expect(request.headers).to have_key("X-Foo")

expect([1, 2, 3]).to all(be_a(Fixnum))

Message expect­ations

expect(FooClass).to receive(:bar).and_return(:baz)
expect(foo).to receive(:bar).and_return(:baz)

expect(foo).to receive(:bar).with(:qux) { Baz.new }

# equivalent to previous example
allow(foo).to receive(:bar) { Baz.new }
expect(foo).to have_received(:bar).with(:qux)

# use sparingly :)
expect_any_instance_of(FooClass).to receive(:bar) { true }
expect will fail if the message is not received. allow is a relaxed version and will not fail.

Exceptions

expect { Foo.find(-1) }.to raise_error(ActiveResource::ResourceNotFound)
expect { Foo.find(1) }.not_to raise_error

Rails models

expect(foo).to be_valid

expect(bar).not_to be_valid
expect(bar.errors.messages).to have_key(:baz)

Rails contro­llers and routing

get :index
expect(response).to render_template("index")

# if routes.rb contains
`get "/foo" => "foo#method"`
# then test it with
`expect(get("/foo?bar=baz")).to route_to(controller: "foo", action: "method", bar: "baz")`

Rails views

assign(:foo, stub_model(Foo, bar: "baz"))
render
expect(rendered).to match(/baz/)

Methods

expect(foo).to respond_to(:bar)

Other

Define a memoized function to run at the start of each example
let(:baz) { double­(Baz, qux: "­quu­x") }

Now, you can say
allow(­foo).to receiv­e(:­bar­).a­nd_­ret­urn­(baz)
and if you reuse baz in your test, you can be sure it's the same thing.

Badges

Nice Cheat Sheet Good Cheat Sheet

Comments (2)

Brent 09:03 30 Apr 2015

Haha I'm not sure why I thought your name is Mike ;). First thing in the morning...

Reply
Brent 09:03 30 Apr 2015

Thank you, Mike! Very helpful.

Reply

Cheatography n. The art of mapping complex subjects into clear, instantly navigable reference guides.