当我 运行 Rspec 时,我的某些 类 加载不正确

Some of my classes are not loading correctly when I run Rspec

我最近将此应用程序从 Rails 3.2 升级到 Rails 4.1,但是我遇到了一些问题 运行ning RSpec.

我的应用有 20 多个模型,所有测试 运行 都很好,除了一个模型,名为 AlunoPos:

# encoding: utf-8
class AlunoPos < ActiveRecord::Base
  has_one :identificador

  (...)
end

这个class有3个属性,当然继承自ActiveRecord::Base。但是,当我在我的一个测试中使用 binding.pry 进行调试时,我在尝试这些操作时得到了这些结果:

AlunoPos.methods - Object.methods => []

AlunoPos.class => Class

这就像 Rails 加载这个模型作为骨架,空的 class,我没有做任何可以解释这个的存根或模拟。

这是我正在 运行 顺便说一句(当 FactoryGirl 尝试设置属性时它失败了):

# encoding: utf-8
require 'spec_helper'

describe AlunosPosController do
  describe "POST desmatricular" do

    before(:each) do
      @aluno = FactoryGirl.create :aluno_pos
      @params = {:matriculas => [@aluno.matricula]}
    end

    it "deve retornar status '200 OK'" do
      post :desmatricular, @params

      response.should be_success
    end

    (...)
  end
end

另一个 class 也不是模型,但仅此而已。超过 20 个模型和这 2 个 classes 是唯一有这个问题的模型,并且它们没有什么不同也可以解释这个问题。除了明显不同的业务逻辑外,它们都非常相似。

我该怎么办?我知道这不是我的模式的问题,因为我已经仔细检查过它,Rails 似乎甚至没有为模型加载 ActiveRecord 并且有一个非 activerecord class 遇到同样的问题.

编辑:添加工厂代码:

# encoding: utf-8
FactoryGirl.define do
  factory :aluno_pos do
    sequence(:matricula) { |m| m }
    association :identificador
  end
end

发现问题。有人 re-declared 那些 class 在随机规格测试中,空 body。不要问我他们为什么这样做,但我删除了它,现在可以使用了。

之前能正常工作的原因是可能因为这个测试可能是最后的测试之一,所以它没有破坏任何东西,但现在我设置了RSpec 来随机化测试 运行 的顺序,它在真实的东西之前声明这些空的 classes。我能想到的另一个原因是我将 RSpec 版本从 2.X 更改为 3.3,它可能改变了 Rails classes.

的加载顺序

底线: 如果 class 是 re-declared,这种事情就会发生,最重要的是,警惕遗留代码.