RSpec测试失败了Citier Gem - 类表继承

时间:2013-01-31 10:47:28

标签: ruby-on-rails unit-testing rspec citier

我为联系人目录设置了以下模型

class Contact < ActiveRecord::Base
  acts_as_citier
end

class Company < Contact
  acts_as_citier
end

class Operator < Company
  acts_as_citier
end

事情是,联系人可以是公司,运营商是一种具有不同属性的公司。

由于单表继承不适用于此特定应用程序,因此我决定使用citier gem。

最后,每个模型都有三个表格。因此,当我添加一个Company对象时,我得到了两个条目,即一个只与名称attribuet联系,而Company表中的其他属性在两个表中共享相同的id,两个表的类型字段都设置为Company。如果我添加一个运算符,则会生成三个entires,即每个表中的一个共享相同的id,前两个表的Type字段设置为Operator。

我的应用程序显然运行良好,但是我的所有测试都被打破了,即那些与这些模型有关的测试 - 加上最糟糕的部分是堆栈级别太深,因为我得到以下错误消息所有损坏的测试。

Failure/Error: Unable to find matching line from backtrace
     SystemStackError:
       stack level too deep
     # /home/ali/.rvm/gems/ruby-1.9.2-p318/bundler/gems/rails_sql_views-0cf1af369a5f/lib/rails_sql_views/connection_adapters/abstract_adapter.rb:23

我检查了rails_sql_views/connection_adapters/abstract_adapter.rb文件至少是上述错误中的行号,它只有这一行:

 self.class.send(:alias_method, :tables, :original_tables_method)

我在这里使用postgresql数据库。

大约有300个测试都被打破了相同的消息:(

请注意,所有损坏的测试都是涉及对这些模型进行任何更改的测试。

1 个答案:

答案 0 :(得分:2)

我做了一些摆弄,最后在我的gemfile中更改了rails_sql_views gem的git cource以从git://github.com/flwyd/rails_sql_views.git读取

这摆脱了堆栈级别太深的东西然而我得到一个全新的错误 - 我的测试仍然失败 - 但由于某种原因它将我的观点视为一个表。我将跟进一个关于此

的新问题

----更新-----

我得到了它的工作,我在spec / spec_helper.rb文件中进行了一些更改并注释掉以下两行:

#config.use_transactional_fixtures = true # because I'm not using fixtures here

#DatabaseCleaner.strategy = :truncation

由于某些原因,Database.strategy配置给了我一些问题 - 这是我修复它但却不知道如何修复的情况之一。我会做一些阅读。与此同时,我的测试现在运行正常!