`

使用Rspec的好处

阅读更多
本文将从下面几个方面,来阐述使用Rspec的好处

    * 对于代码块的测试
    * 强大的测试helpers支持
    * 简洁友好的输出
    * 固定格式的测试结果输出

希望,你看完这些详尽解释的RSpec测试的好处能够,从传统的单元测试,开始接受Rspec方式的测试.而且,你会注意到选择RSpec测试,实际也并不比test/unit困难.

    一. 对于代码块的测试

这是一种内置的测试支持,结构如下所示:

test "should have some behavior" do
  # test some behavior
end


如果,你是在一个独立运行的Rails工程上,那么点击这里,获得插件支持.另外,Rspec也同时支持Before do和after do的语法支持,用于在操作之前和之后执行.就像传统test/unit支持的setup和teardown(不太清楚setup和teardown和test/unit的关系的话请参考Rails UnitTest 测试机制浅析),而且,你可以很容易把这些转变成块测试,如下例所示:


class Test::Unit::TestCase
  def self.setup(&block)
    define_method(:setup, &block)
  end

  def self.teardown(&block)
    define_method(:teardown, &block)
  end
end


既然,最初,我们要通过我们的定义覆盖方法,现在,这些将被自带执行.

    二.强大的测试helpers支持

测试helper如下:
# test/test_helper.rb
require 'action_view/test_case'

# test/helpers/application_helper_test.rb
class ApplicationHelperTest < ActionView::TestCase
  test "should set page title with a block" do
    result = page_title do
      '<em>Heading</em>'
    end

    assert_equal '<h1><em>Heading</em></h1>', result
  end
end


如你所见,唯一需要做的就是继承ActionView::TestCase.下面是对于rake task的写法:

namespace :test do  
  Rake::TestTask.new(:helpers) do |t|
    t.libs << "test"
    t.pattern = 'test/helpers/**/*_test.rb'
    t.verbose = true
  end
  Rake::Task['test:helpers'].comment = 'Run the helper tests in test/helpers'
end

这样执行如下的rake命令就可以对helper进行测试:
$ rake test:helpers


    三.简洁友好的specdoc方式测试输出

实际上,后面的两个Rspec的优势,我将在这一段中说明.假如你有两个个gems包colored和redgreen已经安装,那么使用Rspec你可以通过rake task测试并得到一个很好的输出.测试示例如下:


require 'colored'

def banner(title, pad = 85)
  puts "\n#{title} ".ljust(pad, "*").yellow
end

def stripe
  puts ("-" * 84 + "\n").yellow
end

namespace :test do  
  Rake::TestTask.new(:helpers) do |t|
    t.libs << "test"
    t.pattern = 'test/helpers/**/*_test.rb'
    t.verbose = true
  end
  Rake::Task['test:helpers'].comment = 'Run the helper tests in test/helpers'
end

namespace :tests do
  desc "Documents all tests in doc/TESTDOC"
  task :doc do
    File.open(Rails.root + '/doc/TESTDOC', 'w') do |file|
      Dir.glob('test/**/*_test.rb').each do |test|
        test =~ /.*\/([^\/].*)_test.rb$/
        file.puts "#{$1.gsub('_', ' ').capitalize}:" if $1
        File.read(test).map { |line| /test "(.*)" do$/.match line }.compact.each do |t|
          file.puts " - #{t[1]}"
        end
        file.puts
      end
    end
  end

  desc "Execute all application tests, plus TESTDOC"
  task :run do
    # document a list of all executed tests
    # (used to match up with requirements)
    Rake::Task['tests:doc'].invoke

    # unit tests
    banner "EXECUTING UNIT TESTS"
    Rake::Task['test:units'].invoke
    stripe

    # functional tests
    banner "EXECUTING FUNCTIONAL TESTS"
    Rake::Task['test:functionals'].invoke
    stripe

    # helper tests
    banner "EXECUTING HELPER TESTS"
    Rake::Task['test:helpers'].invoke
    stripe

    # integration tests
    banner "EXECUTING INTEGRATION TESTS"
    Rake::Task['test:integration'].invoke
    stripe

    # performance tests
    banner "EXECUTING APPLICATION BENCHMARKS"
    Rake::Task['test:benchmark'].invoke
    stripe
  end
end


你只需要把这段测试代码,放到一个叫做"tests.rake"的文件,并在你的lib/tasks/目录下.你就可以通过在root目录下运行如下rake目录,进行测试,并得到良好的输出.这个rake tasks也会把测试记录输出到doc目录下的一个TESTDOC文件下.输出为你测工程进行的所有测试得到列表.
  • 大小: 101 KB
分享到:
评论

相关推荐

    程序员为什么还要刷题-rspec:[Ruby,tdd,rspec]

    解释单元测试的目的和好处 描述 TDD 及其重要性 解释什么是 RSpec 比较和对比expectations和matchers 比较和对比常见的 RSpec 术语,包括"describe" 、 "it" 、 "context" 、 before(:each) 、 before(:all) 、 ...

    Chefspec:编写RSpec示例,并生成Chef食谱的覆盖率报告!

    这有两个主要好处: 真的很快! 您的测试可以更改节点属性,操作系统和其他系统数据,以便在不同条件下声明行为。重要笔记ChefSpec需要Ruby 2.2或更高版本以及Chef 12.14.89或更高版本! 本文档对应于master分支,...

    nodespec:用于多个节点服务器实例的RSpec样式测试,支持使用puppet,chef,ansible进行配置

    RSpec样式测试适用于多个节点/服务器实例,并支持使用puppet,chef,ansible进行配置。 Nodespec与Serverspec 是一个受欢迎的瑰宝,它使您可以编写rspec测试来验证服务器/主机的配置。 Nodespec不是Serverspec的...

    W6D5-专案:CSS花絮,RSpec作业,TDD专案

    其次,RSpec是Ruby社区广泛使用的测试框架,它提供了一种BDD(行为驱动开发)的风格来编写测试代码。RSpec允许开发者用自然语言描述代码的行为,使测试代码更易读且更具表达力。在"RSpec作业"中,你可能会遇到编写...

    Ruby-MutationRuby的突变测试工具

    使用MutationRuby的好处在于,它可以揭示那些未被充分测试的代码区域,帮助开发者提高测试质量,确保代码的健壮性。这对于持续集成和持续交付(CI/CD)流程尤其重要,因为良好的测试覆盖率可以减少因代码改动导致的...

    本项目已移至httpgithub.comcontinuoustestsAutoTest.Net_C#_Ruby_下载.zip

    使用AutoTest.Net可以带来以下好处: - 提高测试覆盖率:通过自动化测试,确保所有关键代码路径都得到了验证。 - 快速反馈:实时运行测试,帮助开发者迅速定位和修复问题。 - 改进代码质量:鼓励TDD和BDD实践,促使...

    chefspec-helpers:协助一些常见的 ChefSpec 活动

    使用更简洁的语法测试您的自定义资源安装将此行添加到应用程序的 Gemfile 中: gem 'chefspec-helpers' 然后执行: $ bundle或者自己安装: $ gem install chefspec-helpers用法为了演示这些助手的好处,我将提供...

    soundcheck:运行测试的更智能方式

    用法 soundcheck=&gt; runs all tests it can findsoundcheck spec=&gt; runs rspec testssoundcheck --fast spec=&gt; runs only rspec tests that don't require spec_helpersoundcheck spec/models/user_spec.rb=&gt; runs ...

    榴弹炮:基于Ruby的验收测试框架

    主要好处 独立于Web应用程序技术栈,语言和体系结构。 快速安装和配置完整的测试基础架构(不到5分钟)。 下方是优雅,直观且功能强大的Ruby语言。 可以选择您喜欢的BDD工具(Cucumber,RSpec或芜菁)。 与...

    still_life:Rails升级的最好的朋友

    静物 这是什么? still_life是测试单元,小型测试,RSpec和Capybara的测试框架增强功能,记录了在端到端或单元测试执行期间呈现的所有HTML响应正文文本。... 但是确实,这个小库的真正好处是IMO的“ Rail

    教练:带有中间件的备用控制器

    可测试性-通过轻松模拟测试数据和自然的RSpec匹配器来隔离地测试每个中间件。 有关与Ruby和Rails版本兼容的政策,请参见 。 安装 首先,只需将Coach添加到您的Gemfile ,然后运行bundle : gem 'coach' Coach可...

    tdd_by_example:通过示例进行测试驱动的开发

    - TDD的好处:提高代码质量,减少缺陷,促进设计的改进,增强代码可读性和可维护性。 2. **Ruby与TDD** - Ruby语言特性:动态类型、元编程、简洁语法,使得编写测试和代码更加方便快捷。 - Ruby的测试框架:如...

    RestFul_Rails_Dev_v_0.1

    - **RSpec**:一种流行的 BDD(行为驱动开发)框架,适用于 Rails 应用程序的测试。 - **Capybara**:一种 Web 测试工具,模拟用户的交互行为来测试应用程序。 - **Factory Bot**:用于生成测试数据,方便编写测试...

    initrailsix:为Rails 6自定义初始模板拉伸

    这样做的好处是可以避免在每个新项目中都重复设置相同的环境,如数据库配置、测试框架、前端库等。 在`initrailsix-master`压缩包中,可能包含以下关键组成部分: 1. **Gemfile**:这个文件列出了项目依赖的所有...

    rails-and-lightning-design-system:轨道和闪电设计系统样本

    在实际开发中,使用这样的设计系统可以带来诸多好处: 1. **一致性**:通过预定义的样式和组件,可以保持整个应用的视觉风格统一,提高品牌识别度。 2. **可维护性**:由于组件化的结构,修改或扩展UI变得更为简单...

    《BDD IN ACTION:Behavior-Driven Development for the whole software lifecycle》

    - **RSpec**:另一种常用的 BDD 工具,专为 Ruby 语言设计,提供了一种描述性的语法来编写测试案例。 #### 实施 BDD 的挑战与对策 虽然 BDD 带来了诸多好处,但在实际应用中也会遇到一些挑战,比如: - **团队...

Global site tag (gtag.js) - Google Analytics