legal_name and display_name are methods of an object, so you need to make an object to test. I don't know what class you're testing, so we'll call it SomeClass.
describe SomeClass do
# Now when you reference `object` this block of code will run,
# but only once per test.
# See https://relishapp.com/rspec/rspec-core/docs/helper-methods/let-and-let
let(:object) {
# Or however you create the object.
SomeClass.new
}
end
You're testing the behavior of the to_s method when the object's display_name method is empty or not. So we have at least two "contexts".
- When display_name is empty.
- When display_name is not empty.
describe SomeClass do
let(:object) {
SomeClass.new
}
# We're testing its to_s method, not display_name.
describe '#to_s' do
# These are the conditions we're going to test.
# They're just stubs for now.
context 'when display_name is empty'
context 'when display_name is not empty'
end
end
Now that the scaffolding is in place, we can set up the objects in each context using a before hook which contains code to run before each test. I don't know how exactly to do that in your code, I'll just take a guess.
describe SomeClass
let(:object) {
SomeClass.new
}
describe '#to_s' do
context 'when display_name is empty' do
# This will run before each test in this context block
# to make object.display_name empty.
before do
object.display_name = ''
object.legal_name = 'something'
end
end
context 'when display_name is not empty' do
# This will run before each test in this context block
# to make object.display_name not empty.
before do
object.display_name = 'something'
object.legal_name = 'something else'
end
end
end
end
Now in each context the object will be set up correctly.
Finally, add the tests. Call to_s and make sure it returns the expected value, either what's in display_name or what's in legal_name.
describe SomeClass
let(:object) {
SomeClass.new
}
describe '#to_s' do
context 'when display_name is empty' do
before do
object.display_name = ''
object.legal_name = 'legal'
end
it 'uses legal_name' do
expect(object.to_s) to eq 'legal'
end
end
context 'when display_name is not empty' do
before do
object.display_name = 'display'
object.legal_name = 'legal'
end
it 'uses display_name' do
expect(object.to_s) to eq 'display'
end
end
end
end
It's a lot of scaffolding, but it makes it very clear what situations are being tested.
As a final note, consider another context...
context 'when display_name is blank' do
before do
object.display_name = ' '
object.legal_name = 'legal'
end
end
What should happen there? Look into blank?.