我最近将此应用程序从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
答案 0 :(得分:0)
发现了这个问题。有人在随机规格测试中重新宣布这些类,空体。不要问我他们为什么这样做,但我把它删除了,它现在有效。
以前工作的原因是可能是,因为这个测试可能是最后一个,所以它没有破坏任何东西,但现在我设置RSpec来随机化测试的顺序运行,它在真实事物之前声明这些空类。我能想到的另一个原因是我将RSpec版本从2.X更改为3.3,它可能已经改变了Rails类的加载顺序。
底线:如果重新声明了类,则会发生这种情况,最重要的是,要对遗留代码保持警惕。