有人可以使用SIMPLE用户故事澄清Cucumber将用于什么以及RSpec将用于什么的全部内容?我前几天购买了RSpec书,并且已经完成了它。作者似乎有时候很模糊。
如果用户故事是这样的话,我在想什么(请原谅语法不正确,这只是让你明白这一点):
当用户输入无效的电话号码时 然后他们收到一条消息“无效的电话号码”
如果我写出Cucumber的所有代码来检查这个,然后编写rspec的东西,我基本上复制了我的测试。是否有方案可以解释黄瓜测试应该如何与rspec测试不同?
我觉得你会一直在复制两个级别的测试。
如果没有明确的答案,我会开始认为黄瓜人不想踩到RSpec人的脚趾。
请帮忙。我觉得我的脑袋即将爆炸。
谢谢!
答案 0 :(得分:13)
查看BDDCasts.com的截屏视频可能会有用。他们将引导您创建应用程序的故事和规范。它真的帮助了我。也拥有rspec书,但仍然感到困惑。您甚至可能只想在github上查看它们的源代码。
对我来说,它是这样的:
黄瓜测试用户会看到什么。 (全栈测试)
Rspec测试其他所有内容。 (型号,控制器)
答案 1 :(得分:12)
Cucumber用于解释(描述)应用程序的一部分(故事)而不是单元测试或行为测试(这是RSpec的重点)
因此,恕我直言黄瓜测试(故事)不能替代RSpec测试。
RSpec测试倾向于推动模型和控制器的开发,故事往往会推动视图的发展。
根据你的描述,你似乎正在使用黄瓜来测试故事和行为。
答案 2 :(得分:6)
将Cucumber视为从外部测试整个应用程序,其中RSpec是特定模块的单元测试。首先,通过指定您希望应用程序在Cucumber中具有哪些行为,然后下载到RSpec并描述使该行为有效的类和模块。
我花了一段时间才得到它,但我发现Cucumber非常适合广泛地描述你希望你的应用程序做什么功能,RSpec非常擅长描述它应该如何实现它。< / p>
因此,您可以在黄瓜故事中说出您想要的功能,并编写超级简单的步骤来提供输入和查看输出。然后你下载到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
你运行Cucumber,它告诉你你缺少的步骤,你复制它们并创建简单的步骤来检查这些东西但是还没有编写任何代码。
当您完成步骤定义后,您将进入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中实际工作。
当然你可以用黄瓜或RSpec中的所有东西做任何事情但我真的发现Cucumber帮我用非常简单的方式说出我想要的东西如果我试着在RSpec那样做我会陷入细节之中。如果我首先使用Cucumber描述我想要的基本功能,为什么然后我可以放入RSpec并说出我希望该功能如何实际工作。
有时你的测试会有重复,这不是很干,但如果你认为它是一个细节问题,它可能不会打扰你。我一开始就做了很多重复工作,直到我意识到我应该一般性地说出我想要的黄瓜,然后在RSpec中特别说出我想要的东西。
这只是一个新手如何使用这些工具的想法,但它似乎对我来说效果很好。我可能给了你一个可怕的例子,但我只是试图将一般细节的重点放在我发现使用工具时有用的具体细节上。
答案 3 :(得分:5)
Rspec和Cucumber是独立的,你可以使用Cucumber和另一个测试框架进行测试(测试单元,应该等)。
重点是,你想用黄瓜测试什么? 因为确实你可以结束复制测试,那不是真的有用不是吗? :)
黄瓜有不同的哲学。
使用Cucumber,您可以:
DMA (直接模型访问含义,是的,您可以像在rspec中那样对模型进行全面测试)
模拟浏览器(访问整个MVC堆栈,没有javascript)
自动浏览器(使用webrat和selenium访问您的视图,使用javascript,更慢,更真实的浏览器)
我喜欢用黄瓜来检查返回给用户的内容。当我定义我的故事时,这通常是对我有意义的,因为我没有真正记住我要编写的代码。 所以我用Cucumber测试最终结果 - &gt;视图(使用模拟或自动化浏览器)
然后我使用rspec来测试我在控制器和模型中编写的任何代码。
因此,在您的情况下,
当用户输入无效的电话号码时,他们会收到一条消息“无效的电话号码”
我会使用Webrat检查用户是否在视图中收到无效的电话号码消息。我会使用Rspec来测试我的控制器动作和模型。
答案 4 :(得分:2)
黄瓜可以用来运行任何代码,这就是为什么我觉得你很困惑。但黄瓜不提供其他类型的测试设施,如模拟和存根方法,使单元测试更具体。
rspec的内容实际上是为了解决一小部分行为,并使一切都非常离散。如果您熟悉单元测试及其框架,那么这应该更有意义。
黄瓜实用程序能够将高级描述转换为系统上的一组顶级操作。
答案 5 :(得分:0)
本文可能会为您提供一些观点:When to repeat yourself in tests - and when not to