模拟器或工厂在Rails控制器的单元测试中?

时间:2016-02-16 04:15:06

标签: ruby-on-rails unit-testing model-view-controller controller

我有一个 class Point attr_reader :x, :y def initialize(x,y) @x,@y = x,y PointStats.instance.record(self) end def self.unrecorded(x,y) instance = new(x,y) end ORIGIN = Point.unrecorded(0,0) UNIT_X = Point.unrecorded(1,0) UNIT_Y = Point.unrecorded(0,1) # and the rest follows ... ,其DashboardController方法与我的index模型相互作用:

User

我正在编写此def index user = User.first log_data = user.logs # more controller code here that uses the log_data end 方法的控制器规范。我为我的用户模型定义了FactoryGirl工厂。在单元测试中,我应该使用某种index模拟user,还是应该使用FactoryGirl创建instance_double对象?关于如何测试控制器是否存在惯例/标准/趋势?

1 个答案:

答案 0 :(得分:0)

我想说没有必要嘲笑用户对象 - 它只会让你的规格远离现实。你可以高兴地设置你的规格:

describe DashboardController, :type => :controller do

  let(:user) { create(:user) }

  describe "#index" do
    it "your test here" do
      ####
    end
  end

end

在您访问current_user对象的另一个例子中,您可能会尝试使用以下内容:

let(:user) { create :user }

before do
  allow(controller).to receive(:current_user).and_return(user)
end