I've read a little bit about how one should organize rspec code. It seems like "context" is used more for states of objects. In your words, how would you describe how to use "describe" in rspec code?
Here is a snippet of my movie_spec.rb code:
require_relative 'movie'
describe Movie do
before do
@initial_rank = 10
@movie = Movie.new("goonies", @initial_rank)
end
it "has a capitalied title" do
expect(@movie.title) == "Goonies"
end
it "has a string representation" do
expect(@movie.to_s).to eq("Goonies has a rank of 10")
end
it "decreases rank by 1 when given a thumbs down" do
@movie.thumbs_down
expect(@movie.rank).to eq(@initial_rank - 1)
end
it "increases rank by 1 when given a thumbs up" do
@movie.thumbs_up
expect(@movie.rank).to eq(@initial_rank + 1)
end
context "created with a default rank" do
before do
@movie = Movie.new("goonies")
end
it "has a rank of 0" do
expect(@movie.rank).to eq(5)
end
end
There is not much difference between describe
and context
. The difference lies in readability. I tend to use context
when I want to separate specs based on conditions. I use describe
to separate methods being tested or behavior being tested.
One main thing that changed in the latest RSpec is that "context" can no longer be used as a top-level method.