8

我有一个工厂,例如:

FactoryGirl.define do
  factory :page do
    title 'Fake Title For Page'
  end
end

和一个测试:

describe "LandingPages" do
    it "should load the landing page with the correct data" do
        page = FactoryGirl.create(:page)
        visit page_path(page)
    end
end

我的 spec_helper.rb 包含:

require 'factory_girl_rails' 

但我不断得到:

LandingPages should load the landing page with the correct data
     Failure/Error: page = FactoryGirl.create(:page)
     NameError:
       uninitialized constant Page
     # ./spec/features/landing_pages_spec.rb:5:in `block (2 levels) in <top (required)>'

这是一个新项目,所以我不相信测试实际上是问题所在。我相信它可能设置不正确。关于尝试和/或在哪里解决这个问题的任何想法?

我平静的 pages.rb 文件:

class Pages < ActiveRecord::Base
  # attr_accessible :title, :body
end
4

2 回答 2

23

从您的文件名来看,该模型实际上名为 LandingPage。工厂试图根据你给它的名字来猜测你的类名。所以 :page 变成了 Page。

您可以更改工厂的名称,也可以添加显式类选项:

FactoryGirl.define do
  factory :landing_page do
    title 'Fake Title For Page'
  end
end

或者

FactoryGirl.define do
  factory :page, :class => LandingPage do
    title 'Fake Title For Page'
  end
end
于 2013-01-18T00:14:40.557 回答
6

看起来您的模型名称是复数:Pages. 这应该真的是单数:Page. 您还需要将文件重命名app/models/page.rb为。FactoryGirl 假设一个单一的模型名称。

于 2013-01-18T01:01:07.017 回答