启动Ruby Rails网站的单元和功能测试的最佳方法是什么?
我正在测试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界面。
它将记录点击和文本输入,然后播放,并将检查页面上的正确显示元素。