FactoryGirl :: InvalidFactoryError控制器规格

时间:2014-03-09 18:17:37

标签: ruby-on-rails rspec factory-bot

我正在尝试为联系表单创建控制器规范。我想要的是测试:提交无效属性时呈现:新模板。我已经尝试了工厂的各种配置,以及将其改为特性,而不是工厂无济于事。错误消息不是非常具体,只是无效的工厂。任何想法将不胜感激!

# blog_app/spec/factories/inquiries.rb

FactoryGirl.define do

  factory :inquiry do
    name "TestName"
    email "test@test.com"
    phone "123-456-7890"
    message "TestMessage"
  end

  factory :invalid_inquiry, parent: :inquiry do
    name nil
  end
end

#/app/controllers/inquiries_controller.rb

class InquiriesController < ApplicationController

def new
  @inquiry = Inquiry.new
end

def create
   @inquiry = Inquiry.new(params[:inquiry])
     if @inquiry.deliver
       render :thank_you
     else
       render :new
     end
   end
end

# spec/controllers/inquiries_controller_spec.rb

require 'spec_helper'

describe InquiriesController do
  it "has a valid factory" do
    FactoryGirl.build(:inquiry).should be_valid
end


describe "POST #create" do
  context "with valid attributes" do
    it "delivers inquiry" #pending

    it "renders the :thank_you page template" do
      post :create, inquiry: FactoryGirl.attributes_for(:inquiry)
      response.should render_template :thank_you
    end
  end

  context "with invalid attributes" do
    it "does not deliver inquiry" do #pending

    it "renders :new page template" do
      post :create, inquiry: FactoryGirl.attributes_for(:invalid_inquiry)
      response.should render_template :new
    end
  end
end

describe "GET #new" do
  it "renders :new page template" do
    get :new
    response.should render_template :new
  end
end
end

Finished in 0.31244 seconds
0 examples, 0 failures
/Users/.../.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.4.0/lib/factory_girl.rb:73:in `lint': The following factories are invalid: (FactoryGirl::InvalidFactoryError)

* invalid_inquiry
from /Users/.../Documents/blog_app/spec/support/factory_girl.rb:8:in `block (2 levels) in <top (required)>'
from /Users/.../.rvm/gems/ruby-2.0.0-p353/gems/rspec-core-2.13.1/lib/rspec/core/hooks.rb:21:in `instance_eval'
from /Users/.../.rvm/gems/ruby-2.0.0-p353/gems/rspec-core-2.13.1/lib/rspec/core/hooks.rb:21:in `run'
from /Users/.../.rvm/gems/ruby-2.0.0-p353/gems/rspec-core-2.13.1/lib/rspec/core/hooks.rb:66:in `block in run'
from /Users/.../.rvm/gems/ruby-2.0.0-p353/gems/rspec-core-2.13.1/lib/rspec/core/hooks.rb:66:in `each'
from /Users/.../.rvm/gems/ruby-2.0.0-p353/gems/rspec-core-2.13.1/lib/rspec/core/hooks.rb:66:in `run'
from /Users/.../.rvm/gems/ruby-2.0.0-p353/gems/rspec-core-2.13.1/lib/rspec/core/hooks.rb:418:in `run_hook'
from /Users/.../.rvm/gems/ruby-2.0.0-p353/gems/rspec-core-2.13.1/lib/rspec/core/command_line.rb:27:in `block in run'
from /Users/.../.rvm/gems/ruby-2.0.0-p353/gems/rspec-core-2.13.1/lib/rspec/core/reporter.rb:34:in `report'
from /Users/.../.rvm/gems/ruby-2.0.0-p353/gems/rspec-core-2.13.1/lib/rspec/core/command_line.rb:25:in `run'
from /Users/.../.rvm/gems/ruby-2.0.0-p353/gems/rspec-core-2.13.1/lib/rspec/core/runner.rb:80:in `run'
from /Users/.../.rvm/gems/ruby-2.0.0-p353/gems/rspec-core-2.13.1/lib/rspec/core/runner.rb:17:in `block in autorun'

1 个答案:

答案 0 :(得分:2)

这有用吗?

FactoryGirl.define do

  factory :inquiry do
    name "TestName"
    email "test@test.com"
    phone "123-456-7890"
    message "TestMessage"

    factory :invalid_inquiry do
      name nil
    end
  end
end

或者您可以尝试替换:

  post :create, inquiry: FactoryGirl.attributes_for(:invalid_inquiry)

使用:

  post :create, inquiry: FactoryGirl.attributes_for(:inquiry, name: nil)

完全摆脱invalid_inquiry工厂。