`
fiyuer
  • 浏览: 6691 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

functional test skeleton

阅读更多
namespace :test do
  namespace :functionals do
    
    desc "Generate functional testing skeleton"
    task :generate => :environment do
      dir = ENV['dir']
      if dir.blank?
        puts "Warning! \nNothing is done, please identify the controllers directory! \ne.g. rake test:functionals:generate dir=contents/courses"
      else
        Gen.new.build(File.expand_path('app/controllers/'+dir, RAILS_ROOT)) 
      end
    end
    
  end
end

class Gen
  def build(dir)
    Dir[dir + '/*'].each{|f|
      File.directory?(f) ? build(f) : parse_controller_file(f)
    }
  end
  
  def parse_controller_file(file)
    @clauses = ["all_fixtures"]
    @actions = [{:action => "setup", :text => "    login_as users(:admin)"}]
    action_name, params, response = nil, nil, "success"
    
    File.open(file).each{|line|
      break if line =~ /private/
      # A new action begins, store the info of privious action
      if line =~ /def\s/
        create_action(action_name, params, response)
        action_name, params, response = $'.chop.strip , [], "success"
      else
        #get needed params and response
        if line =~/params\[:\w*\]/
          para = $&.gsub(/params\[|\]/,"")
          params << (para) unless params.nil? or params.include?(para)
        end
        response = "redirect" if line =~ /redirect_to/
      end
    }
    create_action(action_name, params, response)
    
    write_test_file(file)
  end
  
  def write_test_file(file) 
    test_file_name = file.gsub(/app\/controllers/,"#{$`}test/functional#{$'}").gsub(".rb","_test.rb")
    return unless File.exist?(test_file_name)
    
    to_write = []
    test_file = File.open(test_file_name)
    ignore = false
    test_file.each{|line|
      if line =~ /def\s/
        action_name = $'.chop.strip
        ignore = action_name =~ /test_truth/  #delete test_truth
        #don't append actions that have exist
        if @actions.map{|t| t[:action]}.include?(action_name)
          @actions = @actions.select{|t| t[:action]!=action_name}
        end
      end
      line = line.chop
      @clauses.delete(line.strip)
      to_write << line unless ignore
    }
    
    @clauses = @clauses.map{|t| "  "+t}
    @actions.each{|t|
      @clauses << %{  def #{t[:action]}\n#{t[:text]}\n  end}
    }
    to_write.insert(to_write.size-1, @clauses.join("\n\n")) unless @clauses.join("\n\n").blank?
    to_write[to_write.size-1] = "end"
    
    test_file.close
    File.open(test_file_name, 'w') do |f|  
      f.puts to_write.join("\n")  
    end  
  end
  
  def create_action(action_name, params, response)
    unless action_name.nil?
      method = ["create", "update", "destroy"].include?(action_name) ? "post" : "get"
      text = %{    #{method} :#{action_name}#{', '+ params.map{|t| t+" =>''"}.join(", ") unless params.blank?}\n    assert_response :#{response}}
      @actions << {:action=> "test_"+action_name, :text=>text} 
    end
  end
  
end
 
分享到:
评论
1 楼 may小张 2012-02-09  
看不懂!不是学这方面的语言!

相关推荐

    C++小游戏 Skeleton (VisualCPP代码作业)

    C++小游戏 Skeleton (VisualCPP代码作业)C++小游戏 Skeleton (VisualCPP代码作业)C++小游戏 Skeleton (VisualCPP代码作业)C++小游戏 Skeleton (VisualCPP代码作业)C++小游戏 Skeleton (VisualCPP代码作业)C++小游戏 ...

    USB_skeleton.rar_USB_SKELETON_USB设备驱动

    USB Skeleton是Linux操作系统下用于USB设备驱动开发的一个基础框架,它是开发者进行自定义USB设备驱动程序编写时的一个起点。这个框架提供了基本的USB驱动结构,包括枚举、配置、接口选择、端点处理等核心功能,让...

    skeletonViewer

    骨骼查看器(Skeleton Viewer)是一个加载和显示骨骼数据的工具。它能用于测试 Spine 导出的骨骼数据在实际运行时的渲染效果。

    kinetics-skeleton.rar

    人体行为识别open-mmlab/mmskeleton中的kinetics-skeleton数据集,包含了kinetics_train_label.json,kinetics_val_label.json,还有生成之前的各个视频的json文件

    skeletonViewer.jar

    skeletonViewer.jar

    USB Skeleton 源代码

    USB Skeleton源代码是一个开源项目,遵循GPL(GNU General Public License)协议,旨在为开发者提供一个基础框架,用于理解和开发USB设备驱动程序。这个框架对于学习USB通信协议、驱动程序开发,以及创建自己的USB...

    examples-kinetics-skeleton.zip

    在深入探讨"examples-kinetics-skeleton.zip"这个压缩包文件之前,让我们先理解一下相关的关键概念和技术。ST-GCN(Spatial-Temporal Graph Convolutional Network)是一种用于行为识别的深度学习模型,它利用图卷积...

    skeleton

    骨架布局(Skeleton Screen)在IT行业中,特别是在网页和应用程序设计中,是一种常用的技术,用于提供一个加载中的界面,展示内容即将出现的结构,从而改善用户体验。骨架布局通常在数据加载时显示,给予用户一种...

    Spine 骨骼动画查看器Skeleton Viewer_官方文档中文版

    ### Spine 骨骼动画查看器 Skeleton Viewer 官方文档中文版 #### 总述 (Overview) **Spine 骨骼动画查看器(Skeleton Viewer)** 是一款由 Esoteric Software 开发的专用工具,主要用于加载和显示 Spine 导出的...

    kinetics-skeleton-val-sample.zip

    《Kinetics-Skeleton 数据集详解及其在行为识别中的应用》 Kinetics-Skeleton 是一个针对人体骨架数据的行为识别数据集,其主要目的是推动基于深度学习的行为识别技术的发展。该数据集提供了一种标准化的方式来表示...

    matlab开发-Skeleton3D

    在MATLAB中进行3D骨架(Skeleton3D)开发是一项涉及图像处理和计算机图形学的技术。骨架化是图像分析中的一个重要步骤,它旨在提取物体的主要结构,通常用于形状描述、特征提取以及对象识别等任务。"Skeleton3D"项目...

    前端项目-skeleton-framework.zip

    【前端项目-skeleton-framework.zip】是一个包含前端开发框架的压缩包,主要针对移动设备优化,设计为简洁且响应迅速。这个框架,名为"Skeleton Framework",是为快速构建移动优先的网页应用而创建的,旨在简化开发...

    Kinect Skeleton State Check

    Kinect Skeleton State Check 是一个基于微软Kinect设备的程序开发技术,主要涉及到使用C#语言对Kinect传感器捕获的骨架数据进行处理和分析。在本文中,我们将深入探讨这一主题,了解如何通过Kinect获取骨架状态信息...

    前端开源库-init-skeleton

    【前端开源库-init-skeleton】是一个专为前端开发者设计的开源工具,它的核心目标是提供一个基础的项目模板,帮助开发者快速启动新的前端应用。这个工具被称为“骨架”(skeleton),因为它为新项目提供了基本的框架...

    Spine 骨骼动画查看器 Skeleton Viewer 3.6.44

    骨骼查看器(Skeleton Viewer)是一个加载和显示骨骼数据的工具。它能用于测试 Spine 导出的骨骼数据在实际运行时的渲染效果。

    matlab开发-Skeleton2D

    这个“matlab开发-Skeleton2D”项目提供了一个基本示例,帮助用户理解并实现这一过程。在硬件接口和物联网领域,这种技术可以用于图像数据的高效传输和分析。 首先,我们要了解2D骨架提取的基本原理。它通常包括...

    kinetics-skeleton\kinetics_train\kinetics_train.z07

    kinetics-skeleton训练集。太大了,拆成十个上传。

    Laravel开发-laravel-skeleton

    `laravel-skeleton` 提供了一个基本的项目结构,方便开发者快速启动 Laravel 项目。 在 `Laravel-skeleton` 中,`ORM(对象关系映射)`是 Laravel 的核心组件之一,它被称为 Eloquent ORM。Eloquent 提供了一种简单...

    test-skeleton:CucumberSelenium测试的骨架项目

    #测试骨架 Cucumber/Selenium测试的骨架项目 ##跑步说明 该项目使用 gradle 运行(使用 v2.4 测试): gradle cucumber -DisBrowserStackTest=false -DisMobileTest=false -Dtags="~@wip

Global site tag (gtag.js) - Google Analytics