这个问题是关于如何用英语命名RSpec示例组和示例。
据我所知,在RSpec中,describe
,context
(functionally equivalent}和it
应该为您提供完整的句子。例如,
describe "Log-in controller" do
context "with logged-in user" do
it "redirects to root" do
...
end
end
end
读取Log-in controller with logged-in user redirects to root
。真棒。
但在我的应用程序中,我需要在ajaxy页面上测试所有组件(使用Capybara),我倾向于拥有这样的示例组:
describe "blog post" do
describe "content" do
it "is displayed"
end
describe "comment" do
it "is displayed"
describe "editing" do
it "works" # successful comment editing
it "requires logged-in user" # error case 1
it "requires non-empty body" # error case 2
end
end
describe "comment form" do
it "works" # successful comment submission
it "requires valid email address" # error case 1
it "requires non-empty body" # error case 2
end
end
我在这里看到两种反模式:
嵌套描述不读为句子。当然可以放一个's:
describe "blog post" do
describe "'s content" do
it "is displayed"
end
end
或者可以在“博客帖子”之后放一个冒号。或者理想情况下,我会写
describe "blog post" do
its "content" do
it "is displayed"
end
end
但这是不可能的,因为its
是关于属性访问的,我在这里只有字符串。
有没有更好的方法来处理“页面组件”问题?
对于功能,成功案例(对于评论提交等功能)仅标记为it "works"
。至少这简洁明了 - 我发现它比it "can be submitted and causes a comment to be added"
略胜一筹,因为这只会迫使我为明显的事情做出措辞。但有没有更好,更“自然”的方式呢?
如何重构上面的示例example-group;)的建议将不胜感激!
答案 0 :(得分:1)
你不应该考虑让语法正确的例子。如果您的测试显示没有's显示'博客帖子内容',那就没关系了。测试可读且简单。你真正想要的是能够理解当测试不起作用时失败的原因。
关于你的第二点,'它有效'通常不够描述。它不会让别人知道“作品”的含义。如果你实际上在测试很多东西,最好将你的例子分开,例如:
describe 'blog post' do context 'creating a comment' do it 'should require a logged-in user' it 'should require a non-empty body' it 'should require a valid email address' it 'should create a new comment' it 'should be submittable' end end