1

我正在测试以确保将创建的用户分配给我的实例变量@user。我明白 get 是什么意思,但我不确定要为测试写什么。我返回错误 URI 或 URL 的参数错误。我的测试出了什么问题,我该如何解决?

it "checks @user variable assignment for creation" do

    p = FactoryGirl.create(:user)
    get :users
    # I'm confused on what this line above means/does. What does the hash :users refer 
    #to
    assigns[:user].should == [p]

end

expected URI object or string error引用和get :users错误如下

Failure/Error get :users
ArgumentError:
  bad argument: (expected URI object or URI string)
4

2 回答 2

1

我想你想要的是

it "checks @user variable assignment for creation" do
    p = FactoryGirl.create(:user)
    get :show, id: p.id
    assigns(:user).should == p
end

您不确定的行检查@user用户 p 的显示视图中分配的变量 ( ) 的内容是否等于您刚刚在 此处创建更多信息的 p 用户

于 2012-10-29T21:02:50.057 回答
0

你想测试什么动作?通常,对于创建,您需要测试控制器的“创建”操作是否创建了一个用户并分配了一个 @user 变量

我会这样测试它:

describe 'POST create' do
  it 'creates a user' do
    params = {:user => {:name => 'xxx', :lastname => 'yyy'}}
    User.should_receive(:create).with(params)
    post :create
  end

  it 'assigns the user to an @user instance variable' do
    user = mock(:user)
    User.stub!(:create => user)
    post :create
    assigns(:user).should == user
  end
end

请注意,我存根/模拟所有用户方法,因为您正在测试一个控制器,您不必真正创建用户,您只需测试控制器调用所需的方法,用户创建在用户模型规范中进行测试

另外,我做了 2 次测试(如果可能的话,你应该在每个 it 块上只测试 1 件事,首先它测试控制器是否创建了一个用户,然后我测试控制器是否分配了变量

我假设你的控制器是这样的:

controller...
  def create
    @user = User.create(params[:user])
  end

这太简单了,我猜您有更多代码,您也应该测试该代码(验证、重定向、闪存消息等)

于 2012-10-30T12:58:12.847 回答