Rspec 不识别 RSpec::Matcher 和 RSpec::Core 的任何方法 [英] Rspec don't recognise any method of RSpec::Matcher and RSpec::Core

查看:57
本文介绍了Rspec 不识别 RSpec::Matcher 和 RSpec::Core 的任何方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我花了 4 天时间试图正确安装 Ruby on Rails,但我遇到了一个大问题.我第一次使用Linux(对我来说更舒服)但是遇到问题后,我使用了windows.令我惊讶的是,我在 Windows 上也有同样的问题,所以我想我已经禁止了某些东西.如果我尝试为模型加载带有小表单的页面,它会显示一个错误:

I have spent 4 days trying to install Ruby on Rails properly but I have a big problem. The first time I used Linux (it's more confortable for me) but, after having a problem, I used windows. To my surprise, I have the same issue on Windows, so I suppose that I have forbidden something. If I try to load a page with a small form for a model, it shows me an error that says:

Unable to autoload constant ReservationsController, expected ...../app/controllers/reservations_controller.rb to define it

此外,如果我尝试使用 rspec 对模型执行测试,我会收到许多以下类型的错误:

Also, if I try to execute a test for a model with rspec, I receive a lot of errors of the following type:

$ rspec spec/models/reservation_spec.rb 
FFFFF

Failures:

  1) Reservation Fields 
     Failure/Error: it{ should have_fields( :from_date ).of_type( Date ) }
     NoMethodError:
       undefined method `of_type' for #<RSpec::Matchers::BuiltIn::Has:0x915ebc8>
     # ./spec/models/reservation_spec.rb:7:in `block (3 levels) in <top (required)>'

  2) Reservation Fields 
     Failure/Error: it{ should have_fields( :price ).of_type( Float ) }
     NoMethodError:
       undefined method `of_type' for #<RSpec::Matchers::BuiltIn::Has:0x9423cc8>
     # ./spec/models/reservation_spec.rb:10:in `block (3 levels) in <top (required)>'

  3) Reservation Fields 
     Failure/Error: it{ should have_fields( :room ).of_type( String ) }
     NoMethodError:
       undefined method `of_type' for #<RSpec::Matchers::BuiltIn::Has:0x94d5bbc>
     # ./spec/models/reservation_spec.rb:11:in `block (3 levels) in <top (required)>'

  4) Reservation Fields 
     Failure/Error: it{ should have_fields( :until_date ).of_type( Date ) }
     NoMethodError:
       undefined method `of_type' for #<RSpec::Matchers::BuiltIn::Has:0x952cb60>
     # ./spec/models/reservation_spec.rb:8:in `block (3 levels) in <top (required)>'

  5) Reservation Fields 
     Failure/Error: it{ should have_fields( :number_of_persons ).of_type( Integer ) }
     NoMethodError:
       undefined method `of_type' for #<RSpec::Matchers::BuiltIn::Has:0x957bbc0>
     # ./spec/models/reservation_spec.rb:9:in `block (3 levels) in <top (required)>'

Finished in 0.16437 seconds
5 examples, 5 failures

Failed examples:

rspec ./spec/models/reservation_spec.rb:7 # Reservation Fields 
rspec ./spec/models/reservation_spec.rb:10 # Reservation Fields 
rspec ./spec/models/reservation_spec.rb:11 # Reservation Fields 
rspec ./spec/models/reservation_spec.rb:8 # Reservation Fields 
rspec ./spec/models/reservation_spec.rb:9 # Reservation Fields 

Randomized with seed 18738

我安装导轨的步骤如下:

The steps that I have followed to install rails are the following:

我使用的主要文件如下:

The main files that I have used are the following:

Gemfile

source 'https://rubygems.org'
require 'mongo'
source 'http://gemcutter.org'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0'
gem 'mongo_mapper'

gem "rspec-rails", :group => [:development, :test]
group :test do
  gem 'database_cleaner'
end

gem 'json',         '~> 1.8.0'  # Gem to support json
gem 'haml',         '~> 4.0.3'  # Gem to support haml views

gem 'mongo',        '~> 1.9.1'  # Gem to use mongodb
gem 'mongoid', git: 'https://github.com/mongoid/mongoid.git'

gem 'rake',         '~> 10.1.0' # Gem to use rake (rspec and cucumber)
gem 'cucumber',     '~> 1.3.5'  # Gem to test with cucumber
gem 'capybara',     '~> 2.1.0'  # Gem to use capybara in cucumber tests
gem 'wait_for',     '~> 0.1.1'  # Gem to wait for an apparition in cucumber tests
gem 'factory_girl', '~> 4.2.0'  # Gem to create examples data

group :assets do
  gem 'sass-rails',   '~> 4.0.0'
  gem 'coffee-rails', '~> 4.0.0'
  gem 'uglifier',     '~> 2.1.2'
end

mongoid.yml

development:
  sessions:
    default:
      database: hotel_development
      hosts:
        - localhost:27017
      options:
  options:
test:
  sessions:
    default:
      database: hotel_test
      hosts:
        - localhost:27017
      options:
        consistency: :strong
        max_retries: 1
        retry_interval: 0

mongo.rb

MongoMapper.connection = Mongo::Connection.new('localhost', 27017)
MongoMapper.database = "#myapp-#{Rails.env}"

if defined?(PhusionPassenger)
  PhusionPassenger.on_event(:starting_worker_process) do |forked|
    MongoMapper.connection.connect if forked
  end
end

reservation.rb

class Reservation
  include Mongoid::Document

  field :from_date, type: Date
  field :until_date, type: Date
  field :number_of_persons, type: Integer
  field :price, type: Float
  field :room, type: String

  has_one :client
end

reservations_controller.rb

class ReservationsControlller < ApplicationController
  def show
    @user = User.find( params[:id] )
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new( params[:user] )
    if @user.save
      redirect_to @user
    else
      render 'new'
    end
  end
end

routes.rb

Hotel::Application.routes.draw do
  resources :reservations, only: [:show, :new, :create]
end

reservation_spec.rb

require 'spec_helper'

describe Reservation do
  subject{ @reservation }

  describe "Fields" do
    it{ should have_field( :from_date ).of_type( Date ) }
    it{ should have_field( :until_date ).of_type( Date ) }
    it{ should have_field( :number_of_persons ).of_type( Integer ) }
    it{ should have_field( :price ).of_type( Float ) }
    it{ should have_field( :room ).of_type( String ) }
  end
end

如果您需要另一个文件,我可以毫无问题地放入.

If you need another file I can put without problems.

提前致谢.

为预留模型添加了 rspec 测试.我已经包含了 rspec 测试的输出.

Added rspec tests for reservation model. I have included the output of the rspec test.

推荐答案

您的 ReservationsControlller 类名中有三个 l,这就是 Rails 找不到加载控制器文件时的预期控制器类.至于 rspec 问题,也许您缺少一个封闭的 describe,但请分享您的规范,以便我们了解发生了什么.

You have three ls in your ReservationsControlller class name, which is why Rails is not finding the expected controller class when it loads the controller file. As for the rspec problem, perhaps you're missing an enclosing describe, but please share your spec so that we can see what's going on.

更新:查看您的规范,您已将 subject 设置为 @reservation,但尚未初始化 @reservation,因此它的值将是 nil.此外,由于您使用类 Reservation 作为外部 describe 的参数,主题将隐式为 Reservation.new 而没有 主题 调用.

Update: Looking at your spec, you've set your subject to @reservation, but haven't initialized @reservation, so it's value will be nil. Also, since you used the class Reservation as the argument to the outer describe, the subject would implicitly be Reservation.new without the subject call.

至于您现在遇到的错误,我不确定.of_type 似乎是在 mongoid-rspec 中定义的,您没有明确包含它,但是您没有从 have_fields 中得到错误,我认为也是在那里定义的.但是,我没有看到 mongoid-rspec 源代码中定义的 have_fields,所以也许它来自其他地方.无论如何,我会尝试添加 gem 以查看是否可以解决问题.

As for the errors you're now getting, I'm not sure. of_type seems to be defined in mongoid-rspec, which you haven't explicitly included, but you're not getting an error from have_fields, which I thought was defined there as well. I don't see have_fields defined in the mongoid-rspec source, however, so perhaps that's coming from somewhere else. Anyway, I'd try adding the gem to see if that takes care of the problem.

这篇关于Rspec 不识别 RSpec::Matcher 和 RSpec::Core 的任何方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆