Cucumber只是一个关于rspec的包装器来帮助组织测试功能吗?

Bla*_*man 5 ruby rspec ruby-on-rails cucumber

只是想确保我理解事情.

从我到目前为止收集的内容来看,Cucumber只是一个"包装器"或组织测试的好方法,它将事物分类为特征和步骤,其中实际的单元测试处于步骤阶段.

它允许将测试组织成事物的工作方式.

那是对的吗?

jdl*_*jdl 6

有点.

一种组织测试的方法,但不止于此.它的行为类似于原始的Rails集成测试,但更容易使用.这里的最大胜利是你的会话在整个过程中保持透明Scenario.

使用Cucumber的另一件事是,您(应该)使用您的代码从浏览器或客户端的角度进行测试.如果您希望可以使用步骤来构建对象和设置状态,但通常您希望您的步骤首先完成实现该状态所需的动作.

例如,你可以这样做:

Given /I have a user account/ do
  @user = Factory.create(:user)
  # ... more user set up
end
Run Code Online (Sandbox Code Playgroud)

但你应该做这样的事情:

Given /I have a user account/ do
  visit new_user_url
  fill_in "user_login", :with => "some name"
  fill_in "user_password", :with => "foo"
  # ... whatever else your sign up page needs
end
Run Code Online (Sandbox Code Playgroud)

当然,您可以将参数传递给其中任何一个步骤,以使您的调用代码对步骤的行为进行更细粒度的控制.

我通常用我的测试做的如下.

  1. 我使用了shoulda,但是rspec也很好.
  2. 我将负面验证测试(即预期拒绝访问)写为Rails功能测试.
  3. 我写了我的正面验证测试(即用户做他们应该做的事情)作为Cucumber功能.

当然,我仍然为我的模型,库,助手等编写Rails单元测试.

  • 我不同意"应该"的例子比"可能"的例子更好.普遍的共识是,在工作中使用工厂是完全正确的,以便为步骤中实际测试的内容设置前提条件. (2认同)