`
clark1231
  • 浏览: 256472 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

rspec in rails

阅读更多

 原文在我另外一个博客上,地址:http://caok1231.com/blog/2013/04/10/testing-rails-app/

这里直接拷贝过来的,就不在另外排版了。

 

还有其他几篇关于rails测试摘录总结的博文地址:

testing-rails-app#1

testing-rails-app#2

testing-rails-app#3

testing-rails-app#4

factory-girl

  

一直都在回避测试,直接写功能,总觉着写测试代码挺别扭的不好写,但逃避不是办法。在社区中混的时间越长,越能发现越来越多的招聘贴都有写测试的要求,可见测试的重要性。在实际的开发过程中,功能一多,通过手动测试是很难每次考虑全面,测试也是比较重复的工作,不可能每次增加功能就手动将所有的测试都重新测一遍,以保证项目ok(对以前的功能也没影响)。那如何去避免这样的情况呢,那就只能通过测试去增加自己对自己代码的信心。

 

这里先简单介绍下以下两个工具的简单使用,在以后的博客中做继续的补充。

 

rspec: BDD 测试框架, 替代 Rails 默认的 TestUnit

factory_girl: 用于方便的创建测试数据, 替代 Rails 默认的 Test Fixture

1.创建rails项目

rails new example -T

或者

rails new example --skip-test-unit --skip-bundle

忽略原先的 Rails 默认的 TestUnit

 

2.配置

gem_group :development, :test do

  gem 'rspec-rails'

  gem 'factory_girl_rails'

end

 

bundle install

 

config/application.rb

 

  class Application < Rails::Application

    config.generators do |g|

      g.fixture_replacement :factory_girl

      g.test_framework :rspec, :fixture => true

    end

    .....

  end

初始化rspec

 

rails generate rspec:install

这个命令会创建两个文件:

 

.spec 保存运行 rspec 时的需要使用的选项;

spec/spec_helper.rb 是 rspec 的加载和配置文件。

在rspec中加入factory-girl

RSpec.configure do |config|

  .....

  # Mix in FactoryGirl methods

  config.include FactoryGirl::Syntax::Methods

  .....

end

这样在spec测试代码中,我们就可以直接调用FactoryGirl的方法

 

3.简单的测试案例

rails scaffold book name:string publishing_house:string pages:integer ISBN:string content:text

如果照上面配置好之后,你就能发现执行这个命令后,会默认生成一些测试的模板(也可以在application.rb中指定生成那些测试模板),我们可以在那个上面再做修改。

 

然后执行数据库迁移命令和测试准备命令:

rake db:migrate

rake db:test:prepare # 在数据库结构发生变化时, 需要执行这句来保证用 rspec 执行测试时不会出错

 

修改测试用的数据

FactoryGirl.define do

  factory :book do

    name "Aglic Web Development with Rails"

    publishing_house "DHH"

    pages 500

    ISBN "978-7-121-11096-2"

    content "MyText"

  end

end

测试需求:name不能为空,不能重复

require 'spec_helper'

 

describe Book do

  let(:book) { build :book }

 

  it "passes validation with all valid informations" do

    expect(book).to be_valid

  end

 

  context "fails validation" do

    it "with a blank name" do

      book.name = ''

      expect(book.save).to be_false

    end

 

    it "with a duplicated name" do

      create :book, :name => book.name

      expect(book.save).to be_false

    end

  end

end

此时跑下测试rspec spec/models/book_spec.rb, 此时你会发现测试没通过(能通过才有鬼呢,哈哈)。

 

这时就可以修改你的model了,来达到你原先想要达到的目的

class Book < ActiveRecord::Base

  # attributes

  attr_accessible :ISBN, :content, :name, :pages, :publishing_house, :cover

 

  # validation

  validates :name, :uniqueness => true

  validates :name, :presence => true

end

此时再跑测试时,你会得到这样的效果:

Rack::File headers parameter replaces cache_control after Rack 1.5.

...

 

Finished in 0.8842 seconds

3 examples, 0 failures

总算是通过了,接下来可以自己试试加点其他的。

 

4.执行测试的方式

 

在 Rails 应用执行 rspec 测试有两种方式: 使用 rake 命令. 示例:

rake test             # 执行所有测试, 也可以用 rake spec, 或直接用 rake

rake spec:models      # 执行 spec/models 下面的测试

rake spec:helpers     # 执行 spec/helpers 下面的测试

rake spec:requests    # 执行 spec/requests 下面的测试 (验收测试)

 

第一次执行这个命令时, 有可能会提示要先执行 rake db:migrate. 使用 rspec 命令. 示例:

rspec                     # 执行 /spec 下所有的 "*_spec.rb" 文件, 即执行所有测试

rspec spec/models         # 执行 spec/models 下面的测试

rspec spec/helpers        # 执行 spec/helpers 下面的测试

 

rspec spec/models/post_spec.rb    # 只测试一个文件

rspec spec/models/post_spec.rb:7  # 只执行这个文件第7行所在的单个测试 (每个 "it" 块是一个测试)

 

 

原文在我另外一个博客上,地址:http://caok1231.com/blog/2013/04/10/testing-rails-app/

这里直接拷贝过来的,就不在另外排版了。

还有其他几篇关于rails测试摘录总结的博文地址:

testing-rails-app#1

testing-rails-app#2

testing-rails-app#3

testing-rails-app#4

factory-girl

分享到:
评论

相关推荐

    Rails 3 in Action

    6. **测试驱动开发(TDD)**:Rails强调TDD,书中介绍了Rspec、Cucumber等测试工具的使用,以及如何编写单元测试和集成测试。 7. **RESTful设计**:Rails鼓励使用RESTful风格来设计Web服务,书中讲解了如何实现CRUD...

    Rails 4 in Action, Second Edition.pdf

    ### Rails 4 in Action, 第二版:关键知识点解析 #### 一、Rails 4简介与新特性 **Rails 4 in Action, 第二版** 是一本深入介绍Ruby on Rails框架的专业书籍。该书由Ryan Bigg、Yehuda Katz、Steve Klabnik和...

    The RSpec Book

    - **RSpec Rails**:对于使用 Rails 框架的项目,RSpec Rails 是一个扩展库,它提供了针对 Rails 应用程序的专用匹配器和上下文。 #### 五、RSpec 社区与贡献者 - **David Chelimsky**:RSpec 的主要作者之一,他...

    使用Cucumber+Rspec玩转BDD(1)——用户注册

    例如,在Gemfile中添加`cucumber-rails`和`rspec-rails`,然后运行`bundle install`。接着,创建Cucumber的配置文件`features/support/env.rb`,并配置RSpec的助手方法。 在控制器中,我们实现用户注册逻辑,确保...

    RailsSpace

    通过实际案例,读者可以学习到如何使用RSpec和Capybara等测试工具来确保代码的质量。 #### 三、登录功能开发 ##### 3.1 用户登录系统 第六章“Logging in and out”着重讲解了用户登录和登出机制的实现。这包括...

    Rails 4 Test Prescriptions(Pragmatic,2014)

    In this completely revised edition, you'll learn why testing works and how to test effectively using Rails 4, Minitest 5, and RSpec 3, as well as popular testing libraries such as factory_girl and ...

    rails-devise-graphql:创建您下一个Saas产品的Rails 6样板。 预装了graphQL,devise,JWT,CanCanCan,RailsAdmin,Rubocop,Rspec,i18n等

    :gem_stone: 具有devise,JWT,graphQL,CanCanCan和RailsAdmin的Rails 6样板。 这是构建下一个SaaS产品的样板。 这是RubyOnRails 6后端,具有身份验证,GraphQL API,角色和能力管理以及管理仪表板。 它与使用...

    Rails相关电子书汇总二

    "Design Patterns in Ruby.pdf"这本书可能详细探讨了如何在Ruby语言中实现这些经典的设计模式,并且可能会结合Rails框架提供具体的示例。例如,书中可能会介绍如何在Rails应用中使用装饰器模式来扩展和修饰对象的...

    Ruby On Rails傻瓜书

    - **测试驱动开发**(TDD):强调编写测试的重要性,并介绍如何使用RSpec等工具进行单元测试和功能测试。 - **部署**:讨论如何将Rails应用部署到生产环境中,包括选择合适的云服务提供商。 - **性能优化**:提供...

    pusher-fake-example:带有RSpec的pusher-fake示例,用于测试Rails应用程序

    虚假示例 将与RSpec一起使用以测试Rails应用程序的示例。如何1.将PusherFake JS用于Pusher JS实例。 &lt; script &gt; &lt;&#37; if defined? ( PusherFake ) %&gt; // Test environment. // // Note: Ensure output is...

    Ruby_for_Rails.pdf

    - **单元测试**:使用RSpec等工具编写单元测试以确保代码质量。 - **集成测试与系统测试**:探讨如何进行更高层次的测试以验证系统的整体行为。 #### 3.3 高级特性 - **ActiveRecord**:深入了解Rails提供的ORM框架...

    my-apartment-tracker:完整的CRUD React in Rails应用程序可用于跟踪公寓

    【标题】"my-apartment-tracker" 是一个基于React in Rails的完整CRUD(创建、读取、更新、删除)应用程序,专为跟踪公寓信息而设计。这个项目展示了如何将前端的React框架与后端的Ruby on Rails框架相结合,以构建...

    Advanced.Rails(2007)].Brad.Ediger.文字版.pdf

    - **出版社**:O'Reilly Media, Inc. 这本书主要面向已经具备一定Rails基础知识的开发者,旨在帮助他们深入掌握Rails框架的高级特性及应用技巧。 #### 1.2 目标读者 本书适合那些想要进一步提升Rails技能、开发更...

    Wrox.The.Art.of.Rails.May.2008

    - **出版社**:Wiley Publishing, Inc. - **出版日期**:2008年5月 - **ISBN**:978-0-470-18948-1 #### 二、书籍概述与核心理念 《Rails的艺术》由Edward Benson撰写,是一部深入探讨Ruby on Rails框架的技术书籍...

    rspec-cucumber-start:知道如何使用 Cucumber 和 rspec 测试纯 Ruby 应用程序!

    gem 'rspec-rails' # 如果是Rails项目 ``` 然后,创建`features`目录存放Cucumber特性文件,`spec`目录存放RSpec测试。在`features/support`下,可以设置环境文件(如`env.rb`),用于加载必要的库和配置。 接下来...

    pig-ci-rails:作为测试套件的一部分,监视您的Ruby应用程序指标(内存,SQL请求和请求时间)

    In spec/rails_helper.rbrequire 'pig_ci'PigCI . start配置阈值配置阈值将使您的测试套件无法在CI中失败。 您将需要根据您的应用程序配置阈值。 # In spec/rails_helper.rbrequire 'pig_ci'PigCI . start

    authentication_api:身份验证api

    认证API Ruby版本2.3.1 系统依赖rspec-rails factory_girl_rails shoulda_matchers 骗子database_cleaner jwt 加密配置关于短信的配置sms: company: 云片网 expires_in: 3600 # second数据库创建sqlite3 如何运行...

Global site tag (gtag.js) - Google Analytics