当我运行Rspec时,我的一些类没有正确加载

时间:2015-08-11 19:17:53

标签: ruby-on-rails-4 rspec factory-bot ruby-on-rails-4.1

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

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

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

  (...)
end

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

AlunoPos.methods - Object.methods =&gt; []

AlunoPos.class =&gt; Class

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

这是我正在运行btw的测试(当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

这也发生在另一个不是模型的类中,但就是这样。超过20个模型和这两个类是唯一有这个问题的类,并且它们没有什么不同可以解释这一点。除了明显不同的业务逻辑外,它们都非常相似。

我该怎么办?我知道这不是我的架构的问题,因为我已经仔细检查了它,Rails似乎甚至没有为模型加载ActiveRecord,并且有一个非activerecord类遭受同样的问题。

编辑:添加工厂代码:

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

1 个答案:

答案 0 :(得分:0)

发现了这个问题。有人在随机规格测试中重新宣布这些类,空体。不要问我他们为什么这样做,但我把它删除了,它现在有效。

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

底线:如果重新声明了类,则会发生这种情况,最重要的是,要对遗留代码保持警惕。