Ассоциации в испытательных приспособлениях внутри рельсов подвесного двигателя - PullRequest
1 голос
/ 22 ноября 2011

Я столкнулся с проблемой во время модульного тестирования моего нового нового двигателя.

У меня есть две базовые модели:

module Ads
  class Category < ActiveRecord::Base
    set_table_name :categories
    has_many :ads
  end
end

module Ads
  class Ad < ActiveRecord::Base
    set_table_name :ads
    belongs_to :category
  end
end

Он отлично работает в консоли rails.

ruby-1.9.2-p290 :007 > c = Ads::Category.create(title: 'foo')
(0.4ms)  BEGIN
SQL (1.0ms)  INSERT INTO "categories" ("created_at", "title", "updated_at") VALUES ($1, $2, $3) RETURNING "id"  [["created_at", Tue, 22 Nov 2011 15:34:41 UTC +00:00], ["title", "foo"], ["updated_at", Tue, 22 Nov 2011 15:34:41 UTC +00:00]]
(18.0ms)  COMMIT
=> #<Ads::Category id: 2, title: "foo", created_at: "2011-11-22 15:34:41", updated_at: "2011-11-22 15:34:41"> 
ruby-1.9.2-p290 :008 > c.ads.create(title: 'bar')
(0.6ms)  BEGIN
SQL (1.1ms)  INSERT INTO "ads" ("category_id", "created_at", "title", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"  [["category_id", 2], ["created_at", Tue, 22 Nov 2011 15:34:43 UTC +00:00], ["title", "bar"], ["updated_at", Tue, 22 Nov 2011 15:34:43 UTC +00:00]]
(16.8ms)  COMMIT
=> #<Ads::Ad id: 2, title: "bar", category_id: 2, created_at: "2011-11-22 15:34:43", updated_at: "2011-11-22 15:34:43"> 

Я перешел к модульному тесту:

# test/unit/ads/category_test.rb
require 'test_helper'

module Ads
  class CategoryTest < ActiveSupport::TestCase
    # by default it searches in dummy app, is there any cleaner way to change this?
    self.fixture_path = Rails.root.parent + "./fixtures/ads" 
    fixtures :categories, :ads

    test "should find cars" do
      assert_equal 1, Category.where(title: 'Cars').count
    end
  end
end

# test/fixtures/ads/categories.yml
cars:
  title: Cars

# test/fixtures/ads/ads.yml
foo:
  title: Foo
  category: cars

Когда я запускаю модульные тесты:

rake app:test:units

В результате заполнения теста дб:

ActiveRecord::StatementInvalid: PGError: ERROR:  column "category" of relation "ads" does not exist
LINE 1: INSERT INTO "ads" ("title", "category") VALUES ('Foo', 'cars...

Кажется, реклама <-> ассоциация категорий 'игнорируется.Тот же самый подход прекрасно работает в автономном приложении rails.У меня вопрос: что я делаю не так?Дополнительный вопрос: есть ли более чистое решение для изменения пути крепления?

Рельсы: 3.1.3

1 Ответ

0 голосов
/ 08 декабря 2011

У меня была точно такая же проблема, но с движком Rails 3.0. Я не мог исправить это должным образом, но, как обходной путь, я сделал это.

Вместо:

category: cars

Do:

category_id: <%= Fixtures.identify(:cars) %> 

Это работает, потому что идентификатор на самом деле является хешем метки. И Fixtures.identify - это то, что хэширует.

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