【发布时间】:2014-08-24 15:08:49
【问题描述】:
我的测试失败最多的时候是在控制器中,因为我不知道如何正确地组织夹具中的模型以使其易于维护。很多时候我不得不重新组织夹具并重写控制器测试。
有没有人有一些提示可以帮助我解决这个问题?
(有些人认为我们不应该为控制器编写测试,但我认为这不是一个好主意)
【问题讨论】:
标签: ruby-on-rails unit-testing controller tdd fixtures
我的测试失败最多的时候是在控制器中,因为我不知道如何正确地组织夹具中的模型以使其易于维护。很多时候我不得不重新组织夹具并重写控制器测试。
有没有人有一些提示可以帮助我解决这个问题?
(有些人认为我们不应该为控制器编写测试,但我认为这不是一个好主意)
【问题讨论】:
标签: ruby-on-rails unit-testing controller tdd fixtures
您绝对应该测试您的控制器。就个人而言,我的控制器非常纤薄,因此测试本身非常简单。
你的控制器测试不应该关心模型逻辑或内容,如果他们关心,你测试的是错误的东西。
使用 rspec 您可以测试以下内容:
Model.any_instance.should_receive(:foo)
显然你需要模型在那里所以Model.find(id) 返回一些东西,但是你可以在不需要模型的情况下做到这一点。模拟数据库交互是一种选择,使用固定装置是另一种选择。
个人偏好是使用FactoryGirl。它使用简单且不碍事,因此您可以在控制器测试中执行以下操作:
user = FactoryGirl.create(:user, username: "foo", name: "bar")
get :search, username: "foo"
assigns(:user).should == user
只要控制器返回正确的东西,模型中的内容或方式无关紧要。
【讨论】: