Rspec, сопоставление spec-файлов с тестируемыми ruby-файлами - PullRequest
3 голосов
/ 21 февраля 2010

То, что я хочу, - это способ не требовать «тестируемого» класса в каждом файле спецификации.

Итак, мы надеемся, что есть способ установить корень тестируемого исходного кода и rspec автоматически отображать мои тесты, или любые другие способы автоматического сопоставления спецификаций с файлами ruby.

В Rspec для рельсов это происходит волшебным образом, но это не проект рельсов, и я не могу найти никакой полезной информации.

Ответы [ 2 ]

3 голосов
/ 21 февраля 2010

Я предполагаю, что в вашем проекте есть папка lib и папка spec, где у вас есть код и спецификации соответственно. Создайте spec/spec_helper.rb и добавьте

 # project_name/spec/spec_helper.rb
 $: << File.join(File.dirname(__FILE__), "/../lib") 
 require 'spec' 
 require 'main_file_within_lib_folder_that_requires_other_files'

Теперь в ваших отдельных спецификационных файлах вам просто нужно добавить следующую строку, например, rails

 require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
0 голосов
/ 21 февраля 2010

Что вам нужно сделать, это переопределить Object.const_missing.

Нашел этот базовый пример , измените его в соответствии со своими потребностями (установите правильный путь и т. Д.):

def Object.const_missing(name)
  @looked_for ||= {}
  str_name = name.to_s
  raise "Class not found: #{name}" if @looked_for[str_name]
  @looked_for[str_name] = 1
  file = str_name.downcase
  require file
  klass = const_get(name)
  return klass if klass
  raise "Class not found: #{name}"
end
...