rails rspec mock_model Ожидается объект, получил строку - PullRequest
0 голосов
/ 11 января 2012

У меня есть контроллер каталогов и контроллер файлов.Я тестирую контроллер файлов.Я создал действительные атрибуты для файла и пытаюсь смоделировать каталог, чтобы пройти тест.Тесты GET все работают, но ни один из тестов POST не работает.Все тесты POST выдают ошибку: «Ожидается каталог, получена строка».

describe FilesController do
   def valid_attributes {
       :name => "test",
       :reference_id => 1,
       :location => "/path/to/directory",
       :software => "excel",
       :software_version => "2010",
       :directory => mock_model(Directory)
    }
   end

 describe "POST create" do
   describe "with valid params" do
     it "creates a new AssemblyFile" do
       expect {
         post :create, :assembly_file => valid_attributes
       }.to change(AssemblyFile, :count).by(1)
     end

     it "assigns a newly created assembly_file as @assembly_file" do
       post :create, :assembly_file => valid_attributes
       assigns(:assembly_file).should be_a(AssemblyFile)
       assigns(:assembly_file).should be_persisted
     end

     it "redirects to the created assembly_file" do
       post :create, :assembly_file => valid_attributes
       response.should redirect_to(AssemblyFile.last)
     end
   end
end

1) FilesController POST create with valid params creates a new File
 Failure/Error: post :create, :file => valid_attributes
 ActiveRecord::AssociationTypeMismatch:
   Directory(#87017560) expected, got String(#49965220)
 # ./app/controllers/files_controller.rb:60:in `new'
 # ./app/controllers/files_controller.rb:60:in `create'
 # ./spec/controllers/files_controller_spec.rb:79:in `block (5 levels) in <top (required)>'
 # ./spec/controllers/files_controller_spec.rb:78:in `block (4 levels) in <top (required)>'

Если я посмотрю на файл test.log, то это покажет, что сборка является строкой ("assembly" => "1011«).Так что я не уверен, почему mock_model не создает объект?

Я пробовал использовать заглушку!вместо mock_model, но это становится сложным, потому что создать!используется для заглушки!мне нужно множество собственных допустимых переменных, и мне не нужно устанавливать целый ряд других допустимых атрибутов для этого, когда я вообще не пытаюсь даже протестировать контроллер Directory.

Что я делаю не так в моем подходе здесь?

1 Ответ

1 голос
/ 11 января 2012

Передайте идентификатор макета в хэш params вместо самого макета.Вам также нужно будет заглушить метод find, чтобы макет был доступен в действии контроллера:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...