【问题标题】:What are the right parameters for a rspec put request on my stubrspec put 请求在我的存根上的正确参数是什么
【发布时间】:2011-05-27 06:51:39
【问题描述】:

我有一个控制器规格,但我得到了以下失败的期望:

 Failure/Error: put :update, :id => login_user.id, :user => valid_attributes
   #<User:0xbd030bc> received :update_attributes with unexpected arguments
     expected: ({:name=>"changed name", :email=>"changed@mail.com", :password=>"secret", :password_confirmation=>"secret"})
          got: ({"name"=>"Test user", "email"=>"user@test.com", "password"=>"secret", "password_confirmation"=>"secret"})

对我来说,看起来我正在传递"name" =&gt; "Test User",我期待:name =&gt; "test user"

我的规范如下所示:

    describe 'with valid parameters' do
      it 'updates the user' do
       login_user = User.create!(valid_attributes)
       controller.stub(:current_user).and_return(login_user)
       User.any_instance.
          should_receive(:update_attributes).
          with(valid_attributes.merge(:email => "changed@mail.com",:name=>"changed name"))
       put :update, :id => login_user.id, :user => valid_attributes
      end 
end

我的有效属性是这样的:

    def valid_attributes
  {
    :name => "Test user",
    :email=> "user@test.com",
    :password => "secret",
    :password_confirmation => "secret"

  }
end

那么我的参数有什么问题有什么建议吗?

我正在使用带有 rspec 2.6.0 的 Rails 3.0.5...

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rspec2 rspec-rails


    【解决方案1】:

    失败消息准确地告诉您发生了什么:User 的任何实例都期望带有包含:email =&gt; "changed@mail.com" 的哈希的update_attributes,但它得到了:email =&gt; "user@test.com",因为这是valid_attributes 中的内容。同样,它期待:name =&gt; "changed_name",但得到:name =&gt; "Test user",因为这是valid_attributes 中的内容。

    您可以简化此示例并避免这种混淆。这里不需要使用valid_attributes,因为should_receive 无论如何都会拦截update_attributes 调用。我通常这样做:

    controller.stub(:current_user).and_return(mock_model(User)) # no need for a real user here
    User.any_instance.
      should_receive(:update_attributes).
      with({"these" => "params"})
    put :update, :id => login_user.id, :user => {"these" => "params"}
    

    这样,示例中的预期值和实际值是正确的,并且清楚地表明它们是什么并不重要:以:user 形式传入的任何哈希都直接传递给update_attributes

    有意义吗?

    【讨论】:

    • yes 是有道理且有效的......我只是期待如果我在我的 put qequest 中传递我的 valid_attributes ,它们与我将它们传递给 with 方法时相同,仅此而已。但是你的方法行得通...谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    相关资源
    最近更新 更多