2

我是 Rspec 的新手,请告诉我以下两种方法的控制器规范在索引方法中,只有通过输入用户名控件才能看到登录页面,然后转到登录方法并查找人名。如果找到人员,则控制转到人员路径,否则返回到作为索引页面的根路径。

class HomeController < ApplicationController
def index

end

def login
  @person = Person.find(:all, :conditions => ['people.name =?', params[:person][:name]] )

  if @person.blank?
    redirect_to root_path          
  else
    redirect_to people_path
  end
end
end

请帮我。
谢谢。

4

1 回答 1

5

您的 rspec 控制器测试可能是这样的:

describe HomeController do
  render_views
  it "Logs in Person with non-blank name" do
    person = Factory(:Person, name: "non-blank name")
    get :login
    response.should redirect_to(people_path)
  end
  it "does not log in Person with blank name" do
    person = Factory(:Person, name: "") # blank name
    get :login
    response.should redirect_to(root_path)
  end
end

有关详细信息,请参阅rails 控制器规范

编辑:

工厂:创建对象(在本例中为测试对象)的代码。这是创建测试对象的首选方法,因为您可以自定义代码以创建具有不同属性且重复最少的对象。

Fixtures:如果你不使用工厂,你可以为你要创建的每个对象指定属性。对于超过 2-3 个对象,这些数据很快变得难以维护(例如,当您添加一个属性时,您需要对这些对象中的每一个进行更改)。

存根:如果您不想在创建模型对象时创建数据库记录,您可以存根模型代码白测试控制器。

更多信息,请参考:
1.测试指南
2. asciicast(注意:此代码指的是旧版本的 FactoryGirl gem。请参阅下面的 FactoryGirl 的最新 API)
3. FactoryGirl 自述文件

于 2012-05-14T07:45:44.240 回答