【问题标题】:Rspec mistaken on start开始时 Rspec 错误
【发布时间】:2012-12-16 13:32:23
【问题描述】:

我是 Rspec 的新手,我阅读了《rails 3 in action》一书,并在那里进行了 Rspec 测试:

spec/controlers/proect_controller_spec:

require 'spec_helper'

describe ProjectsController do
  let(:user) do
    user = Factory(:user)
    user.confirm!
    user
  end

  let(:project) { Factory(:project) }

  context "standard users" do

    it "cannot access the show action" do
      sign_in(:user, user)
    end

  end
end

spec/factories/user_factory.rb

Factory.define :user do |user|
  user.sequence(:email) { |n| "user#{n}@ticketee.com" }
  user.password "password"
  user.password_confirmation "password"
end

spec/support/factories.rb

Dir[Rails.root + "factories/*.rb"].each do |file|
  require file
end

spec/spec_helper

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require "email_spec"

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false
  config.order = "random"
end

宝石文件

source 'https://rubygems.org'

gem 'rails', '3.2.9'
gem 'pg'
gem 'devise'

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'dynamic_form'
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

group :test, :development do
  gem 'rspec-rails', '~> 2.5'
end

group :test do
  gem 'capybara'
  gem 'database_cleaner'
  gem 'factory_girl'
  gem 'email_spec' # 122 page, for email confirmation
end

当我开始时:rspec ./spec/controllers/projects_controller_spec.rb

我明白了:

 ProjectsController standard users cannot access the show action
     Failure/Error: user = Factory(:user)
     NoMethodError:
       undefined method `Factory' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x8e96710>

我错在哪里了?...

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 testing rspec


    【解决方案1】:

    我认为你想要“factory_girl_rails”,而不是“factory_girl”:https://github.com/thoughtbot/factory_girl_rails

    【讨论】:

    • 不,在书中我们使用 factory_girl(但如果我更改 factory_girl_rails 并在 aplication.rb 中添加方法,我仍然会遇到同样的问题)
    • 虽然书中这样说,但工厂女孩的 API 已更改(请参阅我在回答中提到的博文),所以@David 绝对正确,这本书已经过时了。
    【解决方案2】:

    FactoryGirl 的语法变了,现在不能写了

    Factory(:user)
    

    但你应该写

    FactoryGirl.create(:user)
    

    有关详细信息,请参阅getting started document。 有关升级到 3.0 版的更多信息(包括弃用旧语法),请参阅this blogpost

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 2020-02-27
      • 2014-08-17
      • 1970-01-01
      相关资源
      最近更新 更多