当我 运行 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,这种事情就会发生,最重要的是,警惕遗留代码.
我最近将此应用程序从 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,这种事情就会发生,最重要的是,警惕遗留代码.