Общий новичок Rspec здесь. Запись моих первых тестов сегодня вечером.
У меня есть модель под названием Изображение. Используя скрепку я присоединяю файл, названный фотографией. Стандартный материал. Я выполнил генератор скрепки, и все хорошо работает в производстве и тестовых режимах.
Теперь у меня есть файл спецификации, названный image.rb, и он похож на это (он был создан nifty_scaffold генератором ryanb):
require File.dirname(__FILE__) + '/../spec_helper'
describe Image do
it "should be valid" do
Image.new.should be_valid
end
end
Этот тест перестал работать, и я понимаю, что это из-за моих проверок допустимости модели (т.е. validates_attachment_presence)
Ошибка, которую я получаю:
Errors: Photo file name must be set., Photo file size file size must be between 0 and 1048576 bytes., Photo content type is not included in the list
Таким образом, как я говорю rspec загружать фотографию, когда он запускает мой тест?
Я предполагаю, что это имеет что-то, чтобы сделать с приспособлениями...., возможно, нет все же. Я попытался играть вокруг с ними, но не иметь любую удачу. Для записи я создал папку, названную изображениями в моей папке приспособлений и этих двух файлах, которые я хочу использовать в своих тестах, названы rails.png и grid.png),
Я попытался делать следующее:
it "should be valid" do
image = Image.new :photo => fixture_file_upload('images/rails.png', 'image/png').should be_valid
# I've also tried adding stuff like this
#image.stub!(:has_attached_file).with(:photo).and_return( true )
#image.stub!(:save_attached_files).and_return true
#image.save.should be_true
end
Но rspec жалуется на "fixture_file_upload", не распознаваемый... Я планирую получить ту книгу Rspec. И я тралил по всей сети для ответа, но, может казаться, ничего не нахожу. Моя тестовая база данных DOES заполняется с некоторыми данными, когда я удаляю проверки из своей модели, таким образом, я знаю, что часть его работает хорошо.
Заранее спасибо,
Править:
images.yml похож на это:
one:
name: MyString
description: MyString
two:
name: MyString
description: MyString
Это должно работать с Rails 2.X:
Image.new :photo => File.new(RAILS_ROOT + '/spec/fixtures/images/rails.png')
Начиная с Rails 3, RAILS_ROOT
больше не используется, вместо него вы должны использовать Rails.root
.
Это должно работать с Rails 3:
Image.new :photo => File.new(Rails.root + 'spec/fixtures/images/rails.png')
Определенно приобретите книгу RSpec, это фантастика.
Если кто-то еще найдет это через Google, RAILS_ROOT больше не действует в Rails 3.0. Эта строка должна выглядеть так:
Image.new :photo => File.new(Rails.root + 'spec/fixtures/images/rails.png')
(Обратите внимание на отсутствие косой черты в начале!)
Rails.root - это объект пути, поэтому вы можете использовать его следующим образом:
Image.new :photo => Rails.root.join("spec/fixtures/images/rails.png").open