黄瓜看作测试你的整个应用程序,从外到内,其中RSpec的是特定模块的单元测试。您首先指定希望您的应用程序在Cucumber中具有哪些行为,然后将其下拉到RSpec中并描述使这些行为起作用的类和模块。
我花了一段时间才弄到它,但我发现Cucumber真的很好地描述了你希望你的应用程序做什么功能,RSpec真的很擅长描述它应该如何实现它。
所以你会在你的黄瓜故事中说你想要什么样的功能,并写出超级简单的步骤来提供输入并查看输出。然后,你下降到RSpec,并写下它应该如何实际执行它的规范。
假设您的功能是在网站上搜索用户名的功能。你可能会写一个黄瓜功能,第一个(也是唯一第一)的情况是这样的:
Feature: Search users
In order to find people with similar interests as myself
As a user
I want to search for people
Scenario: Search for similar hobbies
Given there is a search page
And there is a list of hobbies
And one of the hobbies is "full contact ironing"
When I select "full contact ironing"
And press search
Then a list of users with the hobby "full contact ironing" are shown
你跑黄瓜,它会告诉你你缺少的步骤,你复制这些并创建简单的步骤来检查对于这个东西,但不写任何代码呢。
当你与你的步骤定义做了你下拉到RSpec的,并开始你怎么想这个工作的书写规范。 (黄瓜当然应该失败)
describe "SearchController" do
it "should respond to searches" do
sc = SearchController.new
sc.should respond_to(:search)
end
end
你运行RSpec的,看着它失败了,熄灭,并编写代码:
class SearchController
def search
end
end
就是这样。现在再次运行你的测试。它应该通过,所以开始变得更加具体,并开始描述你将如何实际使用搜索功能。我不想深入研究它,我只是想给你一个想法,描述你在Cucumber中想要的内容,然后描述它在RSpec中的实际工作方式。
当然,您可以在Cucumber或RSpec中做所有事情,但我真的发现Cucumber可以帮助我以非常简单的方式说出我想要的内容,如果我在RSpec中尝试这样做,我会陷入细节中。如果我首先使用Cucumber来描述我想要的基本特征,那么我为什么可以放入RSpec并说出我希望该特征如何实际工作。
将有在测试中,有时,这是不是很干的重复,但如果你认为它是细节问题的水平,可能不会打扰你一样多。我开始时做了大量的重复工作,直到我意识到我应该大致说出我想要的Cucumber,然后特别说明我想要的RSpec。
这是如何使用这些工具都只是一个新手的想法,但它似乎很好地为我工作至今。我可能给了你一个可怕的例子,但我只是想把整个细节的重点放到我在使用这些工具时发现有用的特定细节上。
我完全同意,这一直是我的经历。 – 2009-11-10 16:58:08