运行Rails应用程序单元通过Ruby脚本以编程方式进行测试

时间:2014-08-05 08:21:09

标签: ruby-on-rails ruby unit-testing terminal

我正在编写一个ruby脚本,以编程方式在我的一个Rails应用程序中运行单元测试.Rails应用程序的根目录下有以下文件:

.ruby-gemset 包含以下内容:

  my_rails_app

.ruby-version 包含以下内容:

  2.1.2
添加

以使用特定版本的Ruby和为应用程序创建单独的gemset。

我的第一个脚本版本如下所示

      APP_ROOT_DIR_PATH = "/home/jignesh/my_rails_app"
      UNIT_TEST_FILE_PATH_PREFIX = "test/unit"

      unit_tests_dir = Dir.new("#{APP_ROOT_DIR_PATH}/#{UNIT_TEST_FILE_PATH_PREFIX}")

      Dir.chdir(APP_ROOT_DIR_PATH) do
      puts "Present Working Directory: #{Dir.pwd}"

      unit_test_files = unit_tests_dir.entries.select { |file_name| file_name.end_with?(".rb") }.sort
      puts "Total Unit Test: #{unit_test_files.size}"

      unit_test_files.each do |file_name|
       unit_test_relative_file_path = "#{UNIT_TEST_FILE_PATH_PREFIX}/#{file_name}"

        puts "Running unit test: #{unit_test_relative_file_path}"

        unit_test_output = `ruby -Itest #{unit_test_relative_file_path}`

        puts "===========> Output <=========="

        puts unit_test_output

        puts "==============================="
       end
      end

但是上面的脚本运行不正确,因为它要求执行 bundle install 并使用Ruby版本 ruby​​-1.9.3-p194 而不是指定的版本在 .ruby-version 文件中,即2.1.2。

在shell终端上更改目录手动会导致应用程序在 .ruby-gemset .ruby-version 文件并成功运行单元测试,但是以编程方式执行相同的操作并不起作用。任何人都可以帮我修复妨碍脚本运行的问题吗?

以下是我可用并使用 rvm list 命令列出的Ruby版本列表           rvm红宝石

      =* ruby-1.9.3-p194 [ i686 ]
     ruby-1.9.3-p448 [ i686 ]
     ruby-1.9.3-p484 [ i686 ]
     ruby-1.9.3-p545 [ i686 ]
     ruby-1.9.3-rc1 [ i686 ]
     ruby-2.1.0 [ i686 ]
     ruby-2.1.1 [ i686 ]
     ruby-2.1.2 [ i686 ]

      # => - current
      # =* - current && default
      #  * - default

1 个答案:

答案 0 :(得分:0)

你正试图在这里解决一个非常普遍的问题。您可能会发现Guard(和Guard-Test)项目很有趣:它会监听文件系统更改并在应用目录中发生更改时自动运行测试。你甚至不需要自己启动脚本!这确实有助于建立一个早期和经常测试的好习惯。

关于你原来的问题:当你正确设置RVM时,一切都应该与Guard一起使用。