【问题标题】:Uninitialized Constant Error: Factory Girl未初始化的常量错误:工厂女孩
【发布时间】:2014-10-24 05:06:43
【问题描述】:
Uninitialized constant Production::POverview (NameError)
    from /Users/simon_zhu/.rvm/gems/ruby-2.1.0/gems/factory_girl-4.4.0/lib/factory_girl/syntax/default.rb:49:in `instance_eval'
    from /Users/simon_zhu/.rvm/gems/ruby-2.1.0/gems/factory_girl-4.4.0/lib/factory_girl/syntax/default.rb:49:in `run'
    from /Users/simon_zhu/.rvm/gems/ruby-2.1.0/gems/factory_girl-4.4.0/lib/factory_girl/syntax/default.rb:7:in `define'
    from /Users/simon_zhu/Documents/original_version_carmel/carmel/spec/factories/poverview.rb:1:in `<top (required)>'
    from /Users/simon_zhu/.rvm/gems/ruby-2.1.0/gems/factory_girl-4.4.0/lib/factory_girl/find_definitions.rb:20:in `block (2 levels) in find_definitions'
    from /Users/simon_zhu/.rvm/gems/ruby-2.1.0/gems/factory_girl-4.4.0/lib/factory_girl/find_definitions.rb:19:in `each'

我有以下代码:

poverview.rb(工厂)

FactoryGirl.define do
    factory :poverview, class: Production::POverview do
        name "test"
        status ["p", "d", "m"]
    end
end

p_overview_controller_spec.rb(规格)

require 'spec_helper'

describe Production::POverviewController do
  login_user
  # GET Request to pod_info
  describe 'GET pod_info' do
    before(:each) do
        @pods = Factory(:poverview)
        get 'show', :format => :json, :name => @pods.name
        get 'show', :format => :json, :status => @pods.status
    end


  it "should return the correct company when correct id is passed" do
    body = JSON.parse(response.body)

    for(pod in body[0])
        if(pod['name'].eql? @pod.name)
            @pod.status.should.include? pod['status']
        end
    end
  end

end

这是我第一次为 Factory Girl 编写集成测试,我遇到了这个未初始化的常量错误。

任何想法如何解决这个问题?

【问题讨论】:

  • 你能贴出你的型号代码吗?您的模型是否按照您的示例所建议的命名空间?
  • 我认为你的意思是控制器。这些测试是针对控制器的测试。控制器的命名空间正确(poverview_controller 在生产命名空间内)。
  • 您正在根据 Factory girl 中名为 Production::POverview 的模型定义工厂。这是模特的名字吗?那是错字吗?这可能是你的问题
  • 对不起,我有点困惑。这是我的错,测试应该是模型测试。不是控制器。
  • 看来我没有模型,这就是我收到此错误的原因。我想要一种方法来测试我的控制器(返回 json)而不创建模型。有没有办法做到这一点?

标签: ruby-on-rails factory-bot integration-testing


【解决方案1】:

您的测试设置看起来也很奇怪。看起来您确实在混淆集成和控制器测试。

这是一个帮助您入门的帖子。我建议对 Rails 中的测试进行更多研究。 https://semaphoreapp.com/blog/2014/02/11/rails-testing-antipatterns-controllers.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多