Postgres的观点未被rspec认可

Iva*_*var 2 postgresql activerecord rspec ruby-on-rails rails-activerecord

使用Rails 3.2.18和Postgres,我有一些表,我已经为其创建了一个视图,以最小化ActiveRecord加载的数据.在应用程序中,一切似乎都正常运行,但当我尝试运行Rspec时,我得到:

 ActiveRecord::StatementInvalid:
       PG::UndefinedTable: ERROR:  relation "properties_view" does not exist
Run Code Online (Sandbox Code Playgroud)

('properties_view'是'properties'表中的视图)

我该怎么做才能确保Rspec从Postgres正确加载视图?

mu *_*ort 6

Rails并不真正理解像视图这样的"高级"数据库概念,所以它们不会出现在你的schema.rb.当rspec设置其测试数据库时,它将schema.rb用于创建数据库模式,因为您将无法找到您的视图schema.rb,您将无法在测试数据库中找到您的视图,而rspec将使用这些视图并且一切都会崩溃.

解决方案是切换schema.rbstructure.sql.你应该能够更新你config/application.rb说:

config.active_record.schema_format = :sql
Run Code Online (Sandbox Code Playgroud)

然后执行a rake db:structure:dump生成structure.sql文件.完成后,schema.rb从文件系统和版本控制中删除,添加structure.sql,然后重试.