Rack :: Test, приводящий к ActiveRecord :: AssociationTypeMismatch - PullRequest
10 голосов
/ 02 апреля 2011

У меня проблема при запуске всех моих спецификаций.

    ActiveRecord::AssociationTypeMismatch:
       Affiliate(#2154746360) expected, got Affiliate(#2199508660)

Может показаться, что мои модели загружаются дважды.

Я выделил проблему, которая будет представлена ​​в требовании Rack :: Test для определения метода "app".

require 'rack/test'
include Rack::Test::Methods

# app method is needed for rack-test
def app
  Rails.application
end

Если я закомментирую Rails.application мои спецификации стойки не работают, но все остальные мои спецификации работают нормально. Использование Rails.application в методе "app" приводит к появлению ошибки выше.

Если я запускаю свои спецификации индивидуально, все работает. Я предварительно загружаю свою среду с помощью Spork и думаю, что сначала модели загружаются с помощью Spork, а затем они переопределяются при вызове Rails.application в моем методе app.

Есть идеи, как мне решить эту проблему? Я не уверен, есть ли другой способ установить мое приложение Rails в методе "app".

Ответы [ 2 ]

1 голос
/ 04 мая 2011

Из исходного кода для Rails.application:

# File railties/lib/rails.rb, line 34
def application
  @@application ||= nil
end

Это означает, что Rails.application каждый раз возвращает один и тот же объект. Возможно, в этом проблема - запуск нескольких тестов в одном и том же приложении Rails конфликтует с объектами.

Некоторые учебники настроить тесты так:

def app
  Rails::Application
end

Принимая во внимание, что другие делают это так:

def app
  ActionController::Dispatcher.new
end

Оба из которых создают новый объект для каждого вызова app.

РЕДАКТИРОВАТЬ: Только что из журналов заметил, что ActionController::Dispatcher.new помечен как устаревший.

0 голосов
/ 06 мая 2011

У меня больше нет этой проблемы.Я обновил свои драгоценные камни.Rails был обновлен с 3.0.5 до 3.0.7, и я думаю, что, возможно, это было обновление гема, которое решило мою проблему.В любом случае, с новыми версиями гемов моя проблема исправлена.

...