RSpec空?方法
RSpec empty? method
请告诉我如何使用 Rspec
为该方法编写测试
def to_s
display_name.empty? ? legal_name : display_name
end
我是新手,刚开始 RSpec 测试
更新
我的尝试:
describe "display name" do
it "display name empty" do
legal_name.to_s
expect(display_name).to be_empty
end
end
只检查了一部分
我知道这是不正确的,但我尝试了很多选择
legal_name
和display_name
是一个对象的方法,所以需要做一个对象来测试。我不知道你在测试什么 class,所以我们称它为 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
当对象的 display_name
方法是否为空时,您正在测试 to_s
方法的行为。所以我们至少有两个“上下文”。
- 当display_name为空时。
- 当display_name不为空时。
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
现在脚手架已经就位,我们可以在每个上下文中使用 before
hook 设置对象,其中包含每次测试前 运行 的代码。我不知道如何在您的代码中做到这一点,我只是猜测一下。
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
现在在每个上下文中 object
都将正确设置。
最后,添加测试。调用 to_s
并确保它 returns 是预期值,可以是 display_name 中的值,也可以是 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
脚手架很多,但是很清楚测试的是什么情况
作为最后的说明,考虑另一个上下文...
context 'when display_name is blank' do
before do
object.display_name = ' '
object.legal_name = 'legal'
end
end
那里应该发生什么?查看 blank?
.
请告诉我如何使用 Rspec
为该方法编写测试def to_s
display_name.empty? ? legal_name : display_name
end
我是新手,刚开始 RSpec 测试
更新
我的尝试:
describe "display name" do
it "display name empty" do
legal_name.to_s
expect(display_name).to be_empty
end
end
只检查了一部分
我知道这是不正确的,但我尝试了很多选择
legal_name
和display_name
是一个对象的方法,所以需要做一个对象来测试。我不知道你在测试什么 class,所以我们称它为 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
当对象的 display_name
方法是否为空时,您正在测试 to_s
方法的行为。所以我们至少有两个“上下文”。
- 当display_name为空时。
- 当display_name不为空时。
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
现在脚手架已经就位,我们可以在每个上下文中使用 before
hook 设置对象,其中包含每次测试前 运行 的代码。我不知道如何在您的代码中做到这一点,我只是猜测一下。
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
现在在每个上下文中 object
都将正确设置。
最后,添加测试。调用 to_s
并确保它 returns 是预期值,可以是 display_name 中的值,也可以是 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
脚手架很多,但是很清楚测试的是什么情况
作为最后的说明,考虑另一个上下文...
context 'when display_name is blank' do
before do
object.display_name = ' '
object.legal_name = 'legal'
end
end
那里应该发生什么?查看 blank?
.