`
hideto
  • 浏览: 2682351 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Rails宝典七十一式:用RSpec测试你的Rails程序

    博客分类:
  • Ruby
阅读更多
Rails宝典七十一式:用RSpec测试你的Rails程序

Rails虽然自带有Controller、Model、Integration的测试框架,但是用起来感觉很枯燥无味
所以,你应该试试RSpec+Mocha这道纯正的墨西哥菜

RSpec is a framework which provides programmers with a Domain Specific Language to describe the behaviour of
Ruby code with readable, executable examples that guide you in the design process and serve well as both
documentation and tests.

RSpec针对我们Ruby以及Rails的测试工作精心制作了一套独具风味的DSL大餐,让我们来尝尝鲜:
describe MenuItemsController, "creating a new menu item" do
  integrate_views
  fixtures :menu_items

  it "should redirect to index with a notice on successful save" do
    MenuItem.any_instance.stubs(:valid?).returns(true)
    post 'create'
    assigns[:menu_item].should_not be_new_record
    flash[:notice].should_not be_nil
    response.should redirect_to(menu_items_path)
  end

  it "should re-render new template on failed save" do
    MenuItem.any_instance.stubs(:valid?).returns(false)
    post 'create'
    assigns[:menu_item].should be_new_record
    flash[:notice].should be_nil
    response.should render_template('new')
  end

  it "should pass params to menu item" do
    post 'create', :menu_item => { :name => 'Plain' }
    assigns[:menu_item].name.should == 'Plain'
  end

end

这是一段测试MenuItemsController的代码,可读性强大到像是在talking,像是用我们的母语在“说”测试!
回想一下传统的Controller测试:
class MenuItemsControllerTest < Test::Unit::TestCase
  
  def setup
    @controller = MenuItemsController.new
    @request    = ActionController::TestRequest.new
    @response   = ActionController::TestResponse.new
  end

  def test_create_with_valid_menu_item
    assert_difference(MenuItem, :count, 1) do
      post :create, :menu_item => {:name => 'Classic', 
                                   :price => 4.99}
    end
      
    assert_not_nil assigns(:menu_item)
    assert_not_nil flash[:notice]
    assert_redirected_to menu_items_url
  end
  
  def test_create_with_invalid_menu_item
    assert_difference(MenuItem, :count, 0) do
      post :create, :menu_item => { }
    end
  
    assert_not_nil assigns(:menu_item)
    assert_nil flash[:notice]
    assert_response :success
    assert_template 'new'
  end

end

唉,感觉到恶心了吧!

如果你想测试你的Rails应用,你应该看看这份文档:RSpec::Rails

RSpec对Rails的Controllers、Models、Views、Helpers、Plugin、Integration等等测试都已经支持的很好或者即将支持
RSpec这套专有DSL,再加上Mocha这一强大的mocking和stubbing库,简直就是珠联璧合,所向无敌了!

我们可以完全抛弃Rails自带的测试框架,拥抱RSpec!

所以,你还在用Rails那套老古董的测试框架吗?太落后了吧,JavaEye都用RSpec了,你用了吗?
分享到:
评论

相关推荐

    使用RSpec 测试Rails 程序.pdf

    ### 使用RSpec 测试Rails 程序的知识点总结 #### 一、RSpec与Rails结合的基础概念 **RSpec**(RSpec is not a unit testing framework)是一种为Ruby编程语言设计的行为驱动开发(BDD)框架,而**Rails**是基于...

    rspec测试.pdf

    在实际开发中,RSpec被广泛应用于Web应用程序的测试,特别是在使用Ruby on Rails框架时。RSpec能够帮助开发者快速构建出可靠且可维护的测试套件,确保代码的质量和稳定性。此外,RSpec还支持多种类型的测试,包括...

    rspec-rails-swagger:使用RSpec请求规范为Rails应用程序生成Swagger 2.0文档。 测试结果可以作为响应示例捕获

    RSpec Rails昂首阔步 该gem通过使用RSpec记录路径来帮助您生成Swagger文档。 你执行一个命令来运行测试并生成.yaml或.json输出。 运行测试可确保您的API和文档一致,并生成可保存为响应示例的输出。 它的设计在很大...

    Rails的精简版本Rails::API.zip

    Rails::API 是 Rails 的精简版本,针对不需要使用完整 Rails 功能的开发者。 Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比... 标签:rails

    rspec-rails-tutorial:使用 RSpec 开发 rails 应用程序

    使用 RSpec 开发 Rails 应用程序 本教程适用于想要使用 RSpec 开发 rails 应用程序的用户。 参考这个 使用 导轨 4.0.4 Ruby 2.0.0 mysql2 0.3.18 文件 group :development , :test do gem 'rspec-rails' gem '...

    在rails中 使用RSpec生产CHM文档

    标题 "在Rails中使用RSpec生产CHM文档" 暗示了这个话题是关于如何在Ruby on Rails(简称Rails)框架中使用RSpec测试工具来创建帮助文档,特别是以CHM(Microsoft Compiled HTML Help)格式。CHM文件是一种常见的...

    rspec-rails:适用于Rails 5+的RSpec

    rspec-rails rspec-rails将测试框架带到作为其默认测试框架Minitest的替代品。 在RSpec中,测试不仅仅是验证您的应用程序代码的脚本。 它们也是规范(或简称为spec ):用纯英语表示的有关应用程序行为的详细说明。 ...

    workout-app:使用rspec的Rails课程的健身应用程序

    【标题】"workout-app:使用rspec的Rails课程的健身应用程序"是一个基于Ruby on Rails框架的项目,它强调了行为驱动开发(Behavior Driven Development, BDD)的实践。在这个应用中,RSpec是一个核心工具,它允许...

    rspec-rails-examples:RSpec速查表和Rails应用程序:了解如何从模型代码库中专业测试Rails应用程序

    了解如何从模型代码库中专业测试Rails应用程序对于那些想知道如何使用RSpec测试Rails应用程序的开发人员来说,这是一个简短而全面的参考。 在这里,您将找到带有详细文档的深入示例,这些文档详细说明了如何使用...

    tdd-rails-pluralsight:使用RSpec,Capybara和Cucumber以及Pluralsight课程学习Rails的TDD

    用生成的目录测试新动作并显示动作测试创建动作测试索引和编辑操作测试更新和销毁操作安装和设置Devise gem 测试认证测试授权模型测试模型的责任测试验证测试协会测试实例方法测试数据库查询隔离测试嘲笑,存根和...

    rspec-dom-testing:使用RSpec for Rails 5进行DOM测试

    Rails 5不推荐使用控制器测试,而倾向于集成测试。 在Rails 4和5,你可以写在期待assigns和render_template ,如: get :index expect ( assings ( :posts ) . size ) . to eq 2 expect ( assings ( :posts ) ) . ...

    RSpec 3.1中文版

    使用RSpec进行Rails程序的测试,可以帮助开发者遵循测试驱动开发(TDD)的原则,实现高效、可维护的代码开发。 本书基于Rails 4.1版本,使用了一个完整的应用案例来讲解RSpec在Rails中的使用。Rails 4.1作为Rails框架...

    Agile Web Development with Rails 4th edition(敏捷Web开发与Rails:程序指南 第四版)

    《敏捷Web开发与Rails:程序指南 第四版》是一本深度探讨使用Ruby on Rails框架进行敏捷Web应用开发的专业书籍。本书旨在帮助开发者充分利用Rails 4的特性,提高开发效率,实现快速迭代和高质量的代码编写。 Rails是...

    rspec-setup-rails:如何使用 Rspec 快速设置导轨

    ##在 Rails 中快速设置 RSpec,使用 Capybara、Factory Girl、Database Cleaner、Shoulda-matchers 等... 在命令行中,运行rails new app_name -T (关闭默认测试单元) 将 Gems 添加到 gemfile,然后捆绑。 gem '...

    Ruby on Rails入门例子

    5. 测试:使用RSpec或MiniTest进行功能测试和集成测试,确保应用正常工作。 通过这个实例,初学者将了解Rails开发的基本流程,以及如何利用其特性快速构建功能完备的Web应用。Rails的"约定优于配置"(Convention ...

    Ruby on Rails入门经典代码

    Ruby on Rails,简称Rails,是基于Ruby语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习...

    dailyrails-rspec-2017:使用RSpec的Everyday Rails Testing 2017版的样本源

    使用RSpec的样例应用程序进行日常Rails测试(2017版) 请参阅博客,以获取有关此版图书的新闻。 您可以在GitHub的找到早期版本的示例源。 谢谢! 进行示例Rails 5.1应用程序: Aaron Sumner进行测试驱动开发的实用...

    rspec_receitas:几个RSpec测试配方

    2. **Rails Testing Guide**:Rails官方文档中的测试部分,详细介绍了Rails的测试生态系统,包括RSpec的使用。 3. **BDD with RSpec, Cucumber, and Friends**:一本关于BDD和RSpec的书籍,适合想要深入了解BDD实践...

    rails-dummy:为测试和Rails引擎生成虚拟的Rails应用程序

    使用RSpec或Test :: Unit为引擎生成虚拟应用程序的简单任务。 安装 将此行添加到您的应用程序的Gemfile中: gem 'rails-dummy' 然后执行: $ bundle 或自己安装为: $ gem install rails-dummy 用法 将此添加到...

    The.RSpec.Book

    - **第三方库**:除了RSpec本身之外,还有许多第三方库可以增强RSpec的功能,例如RSpec-Rails、RSpec-Mocks等。 #### 总结 RSpec 不仅是一种测试框架,也是一种开发哲学。通过RSpec,开发人员可以更清晰地表达他们...

Global site tag (gtag.js) - Google Analytics