【问题标题】:Mongoid scaffolding tests fail on fixturesMongoid 脚手架测试在夹具上失败
【发布时间】:2013-03-18 22:50:48
【问题描述】:

当我使用 mongoid 创建一个新的 rails 应用程序时:

rails new tddapp --skip-active-record
cd tddapp
echo "gem 'mongoid'" >> Gemfile
bundle
rails g mongoid:config

然后生成一个简单的脚手架:

rails g scaffold building height:Integer name:String

脚手架已创建,最小的应用程序运行良好。但是脚手架生成的测试失败了:

NoMethodError: undefined method `buildings' for #<BuildingsControllerTest:0x007fa6afbf78d8>

违规行表明测试控制器找不到夹具:

@building = buildings(:one)

mongoid 生成器非常好,可以在 test/fixtures/buildings.yml 中创建固定装置,这表明与脚手架功能测试的整个想法有某种程度的合作。

是否有一些配置设置或我需要更改以使功能测试加载 mongoid 的装置?或者脚手架功能测试是否会因 mongoid 而失败? (如果是这样,为什么 mongoid 还要费心创建fixture 文件?)

【问题讨论】:

  • 您使用的是 test-unit 还是 rspec?
  • Scaffold 测试子类 ActiveSupport::TestCase 我相信它基于 test-unit / minitest。

标签: ruby-on-rails mongoid automated-tests scaffolding


【解决方案1】:

不是为了个人推广,而是因为我多次被这个问题困住,而且我认为它可以帮助许多其他人,所以我创建了mongoid-fixture_set,它可以在github 上找到。

它的工作原理与ActiveRecord::FixtureSet 大致相同,因为我移植了很多代码,你只需要将它自己绑定到测试类:

class ActiveSupport::TestCase
  include Mongoid::FixtureSet::TestHelper
  self.fixture_path = "#{Rails.root}/test/fixtures"
end

'lib/rails/test_help.rb' 中的 gem railties 中的 rails 对 ActiveRecord 执行相同的操作

【讨论】:

  • @izaban 从未测试过,但如果您有兴趣,请在 github 上创建问题。另外,我应该检查代码并改进它。
【解决方案2】:

Mongoid 不支持开箱即用的固定装置 (source)。我建议你放弃固定装置,走工厂路线。 factory_girl 是一个很好的选择。

【讨论】:

    【解决方案3】:

    是的,我认为是你没有的 fixtures is a part of ActiveRecord(“rails new tddapp --skip-active-record”)。

    FactoryGirl 是一个非常简单的过渡。可惜它没有开箱即用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 2022-09-25
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 2012-09-02
      • 2014-08-30
      相关资源
      最近更新 更多