[英]Setting up factory girl in Rails 5. Docs seem to leave out an important step
我究竟做錯了什么? 在文檔中似乎沒有地方說要放:
require 'factory_girl_rails'
require 'support/factory_girl'
在你的rails_helper中。
這是我沒有兩行的設置:
的Gemfile:
source 'https://rubygems.org'
gem 'rails', '>= 5.0.0.beta3', '< 5.1'
gem 'sqlite3'
gem 'puma'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks', '~> 5.x'
gem 'jbuilder', '~> 2.0'
gem 'carrierwave'
gem 'carrierwave_direct'
gem "mini_magick"
group :development, :test do
gem 'pry'
gem 'rspec-rails', '~> 3.0'
gem 'factory_girl_rails'
gem 'database_cleaner', '~> 1.5', '>= 1.5.1'
end
group :development do
gem 'web-console', '~> 3.0'
gem 'listen', '~> 3.0.5'
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
用戶模型:
class User < ApplicationRecord
has_many :images
end
Factories.rb文件內部規格:
FactoryGirl.define do
factory :user do
sequence(:name) { |n| "jeff#{n}" }
after(:build) do |user, eval|
user.images << build(:image)
end
end
factory :image do
avatar File.open(File.join(Rails.root, '/spec/support/images/blueapron.jpg'))
end
end
這是我的規格/型號/user_spec.rb:
describe User do
before(:each) do
@user = create(:user)
end
describe "images" do
it "should have multiple images" do
require 'pry' ; binding.pry
@user.images.create({document_file:File.open(File.join(Rails.root, '/spec/fixtures/files/image.png'))})
@user.images.create({document_file:File.open(File.join(Rails.root, '/spec/fixtures/files/image.png'))})
@user.images.length.should eq(3)
end
end
end
當我運行測試時:
Failures:
1) User images should have multiple images
Failure/Error: @user = create(:user)
NoMethodError:
undefined method `create' for #<RSpec::ExampleGroups::User::Images:0x007fea80756f08>
# ./spec/models/user_spec.rb:4:in `block (2 levels) in <top (required)>'
之后,將這兩行包含在我的rails_helper中:
# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'factory_girl_rails'
require 'support/factory_girl'
突然它現在起作用了:
before(:each) do
4: @user = create(:user)
5: end
6: describe "images" do
7: it "should have multiple images" do
=> 8: require 'pry' ; binding.pry
9:
10: @user.images.create({document_file:File.open(File.join(Rails.root, '/spec/fixtures/files/image.png'))})
11: @user.images.create({document_file:File.open(File.join(Rails.root, '/spec/fixtures/files/image.png'))})
12:
13: @user.images.length.should eq(3)
[1] pry(#<RSpec::ExampleGroups::User::Images>)> @user
=> #<User:0x007f86e86cbcd8 id: 1, name: "jeff2", created_at: Thu, 17 Mar 2016 04:39:42 UTC +00:00, updated_at: Thu, 17 Mar 2016 04:39:42 UTC +00:00>
我甚至不記得我在哪里發現了這兩條線。 是否在文檔中包含這些行?
在工廠中,您使用build :
after(:build) do |user, eval|
user.images << build(:image)
end
在您的規范中,您可以使用create :
describe User do
before(:each) do
@user = create(:user)
end
您必須使用相同的鈎子,我建議您:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.