2014-10-07 3 views
0

Я получаю пустой массив, пытаясь использовать изготовители в моих спецификациях. Я предполагаю, что файл-изготовитель не загружен. Если я загружаю файл-изготовитель после инициализации RSpec, то создается Fabrication::DuplicateFabricatorError. Вот мои настройки:Fabricators not loading

  • рельсы 4.1.4
  • RSpec-ядро 3.1.5
  • RSpec рельсы 3.1.0
  • изготовление 2.11.3

.

# config/application.rb 
config.generators do |g| 
    g.test_framework  :rspec, fixture: true 
    g.fixture_replacement :fabrication, dir: "spec/fabricators" 
end 

# spec/rails_helper.rb 
config.fixture_path = "#{::Rails.root}/spec/fabricators" 
config.use_transactional_fixtures = true 

Вот код, который должен работать, но это не так:

# app/models/user.rb 
class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
end 

# spec/fabricators/user_fabricator.rb 
Fabricator(:user) do 
    email     { Faker::Internet.email } 
    password    "password" 
    password_confirmation "password" 
end 

# spec/models/user_spec.rb 
require 'rails_helper' 

describe User do 
    before :each do 
    @user = Fabricator(:user) 
    #=> [] 
    end 

    it "has an email" do 
    expect(@user.email).to be_a(String) 
    expect(@user.email.length).to be > 0 
    end 
end 

После того, как пустой массив, возвращаемым для моих переработчиков, я получаю эту ошибку при выполнении функции: undefined method 'email' for []:Array. Я ожидаю получить прохождение спецификации.

ответ

3

У вас есть две проблемы здесь, насколько я могу судить. Первое, что вам не нужна эта строка в вашем rails_helper.rb

config.fixture_path = "#{::Rails.root}/spec/fabricators" 

Во-вторых, вы вызываете Fabricator вместо Fabricate в before блоке вашей спецификации. Fabricator используется для объявления определений, а Fabricate используется для фактического создания объекта.

+0

Спасибо, Пол! Моя спецификация проходит с этими двумя изменениями. Я чувствую себя глупо, если не вижу различий в написании, но выбор слова имеет смысл, когда вы упоминаете об этом. – Nathan

 Смежные вопросы

  • Нет связанных вопросов^_^