如何期待失败的步骤并传递黄瓜的失败?

时间:2011-02-01 15:50:42

标签: ruby testing cucumber

我们想测试黄瓜的步骤定义。我们希望能够检查的一件事是我们期望失败的测试实际上失败了。要做到这一点,我们想编写我们知道会失败的场景并将它们添加到我们的测试套件中,但是标记或以其他方式表示它们,以便当它们失败时它们“通过”。如何处理这个?

3 个答案:

答案 0 :(得分:0)

你应该测试消极状态。失败的步骤只是通过步骤的倒数。所以做一些像:

Then /i should not be true/ do
  some_value.should_not be_true
end

这就是我要测试失败的方法。您还可以捕获异常等,并验证块实际上是否会抛出异常

lambda do
  something_that_horks
end.should raise_error(Specific::Error)

您只需在测试用例中反转测试以测试阴性结果,而不是阳性结果。

答案 1 :(得分:0)

这是一个非常复杂的例子,但最终的结果是一个非常干净的方法,期望黄瓜场景失败。这些只是我正在进行的项目中的一些小组件。创建缺少数据的用户失败的原因是因为我的用户模型中有一些验证器。所有源代码都可以找到here

特征/ step_definitions / before_step.rb

Before("~@fails") do
  def assert_cucumber(assersion, msg = "an error was thrown")
    assert(assersion == true, msg)
  end
end

Before("@fails") do
  def assert_cucumber(assersion, msg = "an error was thrown")
    assert(assersion == false, msg)
  end
end

特征/ step_definitions / user_step.rb

Given /^a user with$/ do |params|
  params = params.rows_hash
  unless User.find_by({username: params[:username]})
    assert_cucumber(User.new(params).save, "could not create user")
  end
end

特征/ user.feature

Scenario: check if userers exsist
  Given a user with
    | username | johnsmith             |
    | email    | johnsmith@example.com |
    | password | password              |
  Then a user with username "johnsmith"

@fails
Scenario: create user with missing data
  Given a user with
    | username | johndoe |
  Then a user with username "johndoe"

答案 2 :(得分:-1)

您将-w开关传递给Cucumber命令。

它将输出正常格式,但最后会给出一个摘要,详细说明所有测试用例是否失败,如果有任何测试用例,则会指定哪些测试用例。