📅  最后修改于: 2020-12-06 10:57:14             🧑  作者: Mango
RSpec的强项之一是它提供了许多编写测试,清除测试的方法。当您的测试简短而整洁时,集中精力于预期的行为而不是专注于如何编写测试的细节将变得更加容易。 RSpec主题是另一个允许您编写简单明了的测试的快捷方式。
考虑下面的代码-
class Person
attr_reader :first_name, :last_name
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
end
describe Person do
it 'create a new person with a first and last name' do
person = Person.new 'John', 'Smith'
expect(person).to have_attributes(first_name: 'John')
expect(person).to have_attributes(last_name: 'Smith')
end
end
实际上,这很显然,但是我们可以使用RSpec的主题功能来减少示例中的代码量。我们通过将人员对象实例化到describe行中来实现。
class Person
attr_reader :first_name, :last_name
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
end
describe Person.new 'John', 'Smith' do
it { is_expected.to have_attributes(first_name: 'John') }
it { is_expected.to have_attributes(last_name: 'Smith') }
end
运行此代码时,您将看到此输出-
..
Finished in 0.003 seconds (files took 0.11201 seconds to load)
2 examples, 0 failures
注意,第二个代码示例要简单得多。我们在第一个示例中使用了一个it块,并用两个it块替换了它,最终需要更少的代码并且非常清楚。