在rails测试中,仅在测试环境中创建模型

时间:2011-08-02 08:01:15

标签: ruby-on-rails rspec

我有一个具有多态关联的模型,我正在运行rspecs。 测试要求多态字段指向具有某些字段的模型(例如名称)。

由于我不想使用任何现有的(和复杂的)模型,我想以某种方式创建一个新的简单模型(只存在于测试中),我的主要模型可以指出。

有办法做到这一点吗? 当模型依赖于其他模型时,还有其他任何方法来测试模型吗?

2 个答案:

答案 0 :(得分:0)

正如您所料,测试应该是独立的。

这是存在存根和模拟的地方,它是Rails的继续进行方式。

如果你想创建一个专用于测试的模块(这是一种过度杀戮导致它是存根的作用),只需提醒ruby类和模块是可执行的。

所以你可以这样做:

if Rails.env.test?

module Foo
...
end

end

答案 1 :(得分:0)

问题解决了 - 使用'mocha'宝石。

class Comment < ActiveRecord::Base
  belongs_to :commentable, :polymorphic => true
end

在测试中,可以这样做:

class MockUser {
# Stuff
}

comment = Comment.create!.expects('commentable').returns(MockUser.new)

现在它将起作用:

comment.commentable.name