Приспособления для рельсовых испытаний не загружаются
Похоже, что Rails не загружает никаких приспособлений для модульных или функциональных испытаний. У меня есть простой "products.yml", который анализирует и выглядит правильно:
ruby:
title: Programming Ruby 1.9
description:
Ruby is the fastest growing and most exciting dynamic
language out there. If you need to get working programs
delivered fast, you should add Ruby to your toolbox.
price: 49.50
image_url: ruby.png
Мой функциональный тест контроллера начинается с:
require 'test_helper'
class ProductsControllerTest < ActionController::TestCase
fixtures :products
setup do
@product = products(:one)
@update = {
:title => 'Lorem Ipsum' ,
:description => 'Wibbles are fun!' ,
:image_url => 'lorem.jpg' ,
:price => 19.95
}
end
Согласно книге, Rails должен "магическим образом" загружать светильники (как мой test_helper.rb
имеет fixtures :all
в этом. Я также добавил явную загрузку светильников (видно выше). Да рельсы жалуется
user @ host ~/Dropbox/Rails/depot > rake test:functionals
(in /Somewhere/Users/user/Dropbox/Rails/depot)
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -Ilib:test "/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader.rb" "test/functional/products_controller_test.rb"
Loaded suite /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake/rake_test_loader
Started
EEEEEEE
Finished in 0.062506 seconds.
1) Error:
test_should_create_product(ProductsControllerTest):
NoMethodError: undefined method `products' for ProductsControllerTest:Class
/test/functional/products_controller_test.rb:7
2) Error:
test_should_destroy_product(ProductsControllerTest):
NoMethodError: undefined method `products' for ProductsControllerTest:Class
/test/functional/products_controller_test.rb:7
...
Я сталкивался с другим вопросом о тестовых приборах Rails. В модульном тестировании Rails не загружаются приборы, но это приводит к проблеме с плагином (что-то связанное с порядком загрузки приборов).
Кстати, я работаю на Mac OS X 10.6 с Rail 2.3.5 и Ruby 1.8.7, без дополнительных плагинов (кроме базовой установки).
Любые указатели о том, как отлаживать, почему магия Rails, кажется, терпит неудачу здесь? Это проблема версии? Могу ли я отследить код в библиотеках и найти ответ? Есть так много "смешанных" модулей, которые я не могу найти, где fixtures
метод действительно живет.
3 ответа
В Rails 3.2 я обнаружил, что при запуске одного тестового файла (с указанием TEST=/test/unit/foo.rb) приборы не загружаются. Однако при запуске тестов с
ruby -Itest /test/unit/foo.rb
приборы загружены, как и ожидалось.
Используя ruby 1.8.7 и rails 2.1.1, я решил проблему, установив self.use_instantiated_fixtures = true
в test_helper.rb.
Отказавшись, я попытался переустановить / перестроить на Rail 3.0.0beta3. это решило проблему. Я могу только предположить, что это было какое-то несоответствие версий.