启动Ruby Rails网站的单元和功能测试的最佳方法是什么?

时间:2020-03-06 14:48:48  来源:igfitidea点击:

我正在测试Ruby Rails网站,并希望开始进行单元和功能测试。

解决方案

黄瓜和RSpec值得一看。他们鼓励以行为驱动的,基于示例的风格进行测试。

RSpec是用于单元级测试的库:

describe "hello_world"
  it "should say hello to the world" do
    # RSpec comes with its own mock-object framework built in,
    # though it lets you use others if you prefer
    world = mock("World", :population => 6e9)
    world.should_receive(:hello)
    hello_world(world)
  end
end

它具有对Rails的特殊支持(例如,它可以单独测试模型,视图和控制器),并且可以替代内置于Rails的测试机制。

Cucumber(以前称为RSpec Story Runner)使我们可以用(相当)普通的英语编写高级验收测试,然后向他们展示(并同意)客户,然后运行它们:

Story: Commenting on articles

  As a visitor to the blog
  I want to post comments on articles
  So that I can have my 15 minutes of fame

  Scenario: Post a new comment

    Given I am viewing an article
    When I add a comment "Me too!"
    And I fill in the CAPTCHA correctly
    Then I should see a comment "Me too!"

我的建议是(认真)只是绕过内置的rails单元/功能测试,然后直接使用RSpec。

内置的rails使用了" Test :: Unit"框架,该框架与ruby一起提供,它或者多或者少是JUnit / NUnit / AnyOtherUnit的直接端口。
我发现这些框架都非常乏味且令人讨厌,导致人们对编写单元测试一无所知,这显然不是我们要在此处达到的目标。

RSpec是另一种野兽,其重点是描述代码应该做什么,而不是断言它已经做什么。它将改变我们查看测试的方式,并且我们将获得更多乐趣。

如果我听起来有点狂热,那是因为我真的相信RSpec就是那么好。我从对单元/功能测试的烦恼和厌倦,到对它的坚定信念,几乎完全是由于rspec。

听起来我们已经编写了应用程序,所以我不确定使用RSpec而不是Test :: Unit会为我们带来巨大的好处。

无论选择哪种方式,我们都会很快遇到另一个问题:管理固定装置和模拟(即测试"数据")。因此,请看Shoulda和Factory Girl。

即使已经编写了应用程序,我也建议使用RSpec而不是Test :: Unit,因为一个简单的事实,那就是没有应用程序可以完成。我们将要添加功能和重构代码。尽早养成正确的测试习惯将有助于减轻这些改变的痛苦

我们还可以使用Firefox插件(例如http://selenium.openqa.org/)测试Web界面。

它将记录点击和文本输入,然后播放,并将检查页面上的正确显示元素。