对于控制器规范,我会编写如下测试:
it "renders with a user_id" do
get :index, id: @user.id
assigns(:items).should == @user.items
response.should be_success
response.should render_template("index")
end
一个用于user_id
路径,一个没有。我把设置留给@user
你;您可以使用固定装置或 FactoryGirl,在前块中实例化一个,或者只是将其全部存根/模拟。如果可以的话,最好避免访问数据库。对于诸如和关联之类的东西,这可能会有点棘手,Item.all
如果没有存根或持久化到测试数据库,它们就更难连接起来。Mocking 和 stubbing 使得它变得容易,但如果模型发生变化,也会让你的测试变得更加脆弱。
对于请求规范,我将使用 Capybara 创建真正的 DB 对象并执行以下操作:
it "lists all items without a user_id" do
visit foo_path
current_path.should == foo_path
page.should have_content(item1.name)
page.should have_content(item2.name)
end
..和类似的路径与user_id
. 在不知道您的数据以及如何呈现它的情况下,我无法更具体。如果您使用的是 JSON,则应在此处检查整个 JSON 响应。不过,我不会检查控制器规范中的 JSON 响应;控制器的工作只是将数据洗牌到正确的视图。您也可以单独测试视图,然后在您的请求规范中测试整个端到端场景。