Getting the full RSpec test name from within a before(:each) block
In RSpec 2.0 you can use (I'm not sure if it is a best way but it works)
x.example.metadata[:example_group][:full_description]
As for RSpec 1.X I don't know. And that's probably what you are asking for...
How to fetch RSpec test name in before(:each) block without a spec_helper
describe "Main test suite" do
before(:each) do |x|
puts "#{x.class.description} - #{x.example.description}"
end
it "should run test #1" do
...
end
it "should run test #2" do
...
end
end
Getting the RSpec example group name from within the before(:all) block
Try this:
config.before :all do |test|
p test.class.metadata[:example_group][:full_description]
end
RSpec -- test if block called with block defined in before
Try something like this (untested by me):
context "the node definition using block of code" do
let(:node){
node = Node.new "arg1", "arg2", node_block
# more complex stuff here
node
}
context "checking the block is called" do
let(:node_block) {
double = double("node_block")
double.should_receive("some kind of arg").and_return("something")
# this will now cause a fail if it isn't called
double
}
it "should call the block" do
node.blah()
end
end
let(:node_block) {
# some real code
}
subject { node.blah() }
it { should == 2 }
# ...
end
So that's a very shaky piece of code (you'll have to fill in the gaps as you didn't give very much to go on, and let
is obviously a lambda too, which could mean you've got to play around with it a bit) that uses let
and a double
to check it's called, and avoids using before
, which is really for side effects not setting up variables for use in the specs.
@zetetic makes a very insightful comment that you're not testing behaviour here. I'm not against using rspec for doing more unit test style stuff (guidelines are made to be broken), but you might ask how later tests will pass when using a real block of code if that block isn't being called? In a way, I'm not even sure you need to check the block is called, but only you know.
rails rspec before all vs before each
before(:all)
runs the block one time before all of the examples are run.
before(:each)
runs the block one time before each of your specs in the file
before(:all)
sets the instance variables @admission, @project, @creative, @contest_entry
one time before all of the it
blocks are run.
However, :before(:each)
resets the instance variables in the before block every time an it
block is run.
Its a subtle distinction but important
again,
before(:all)
#before block is run
it { should belong_to(:owner).class_name('User') }
it { should belong_to(:project) }
it { should have_many(:entry_comments) }
it { should validate_presence_of(:owner) }
it { should validate_presence_of(:project) }
it { should validate_presence_of(:entry_no) }
it { should validate_presence_of(:title) }
before(:each)
# before block
it { should belong_to(:owner).class_name('User') }
# before block
it { should belong_to(:project) }
# before block
it { should have_many(:entry_comments) }
# before block
# before block
it { should validate_presence_of(:owner) }
# before block
it { should validate_presence_of(:project) }
# before block
it { should validate_presence_of(:entry_no) }
# before block
it { should validate_presence_of(:title) }
Related Topics
Ruby Class Instance Variables and Inheritance
Pg Error Could Not Connect to Server: Connection Refused Is the Server Running on Port 5432
"Errno::Eaccess...Permission Denied" Running Compass Watch
Singleton Method VS. Class Method
Installing Ruby 2.3 on Wsl (Windows Subsystem for Linux)
Ruby Way to Group Anagrams in String Array
Convert String with Comma to Integer
How to Organize Minitest/Unit Tests
In Ruby/Rails, How to Encode/Escape Special Characters in Urls
Understanding Method_Added for Class Methods
Passenger Installation with Nginx Fails
Is Time.Zone.Now.To_Date Equivalent to Date.Today
Ruby Get Time in Given Timezone
I Can't Install Rmagick Gem on Windows
Advantages and Disadvantages of Ruby on Rails Polymorphic Relationships