【问题标题】:Writing Testcase in Rspec for Update method在 Rspec 中为 Update 方法编写测试用例
【发布时间】:2014-05-28 05:41:39
【问题描述】:

我正在为控制器的更新方法编写 Rspec,它使用给定的 id ID 更新表 T 中的记录。在规范中,我想添加一个案例来检查表 T 中是否存在任何带有 ID 的记录,如果不存在,它应该给出如下错误但是对于 RSpec 来说是新手,我无法完成它。

  it "should give error when record with the given id does not exist" do
    pending "case yet to be handled"
  end

所以如果有人帮助我编写这个规范。

【问题讨论】:

    标签: ruby-on-rails ruby rspec


    【解决方案1】:

    您应该传递参数 id 并使用正确的 HTTP 动词来发送请求以更新操作。即

    it "should give error when record with the given id does not exist" do
        put :update, id: <invalid_id>
        # you expectations here    
    end
    

    How I learned to test my Rails applications, Part 4: Controller spe 有一些关于控制器测试的示例和更多解释。

    【讨论】:

    • 看我写的一样。但它给出了以下错误:“nil:NilClass 的未定义方法‘保存’”
    • 在您的控制器中,您正在对不存在的对象调用保存。您可以检查对象是否存在,然后仅更新值并对其调用保存方法。我更喜欢使用 updated_attributes 方法,这样我就不必对其调用 save 方法,然后再检查它是否成功。
    【解决方案2】:

    你可以Model.find 并检查这条记录是否不存在。

    it "should give error when record with the given id does not exist" do
        expect { Model.find(<your ID>) }.should raise_error(ActiveRecord::RecordNotFound::Error)
    end
    

    【讨论】:

    • 我想知道是否有任何方法可以知道这个给定的 id 是否是有效的 id,因为它可能不是模型的最后一个 id,所以我认为最好检查一下模型的 id 列表包括给定的 id,但我不知道该怎么做。如果我错了,请纠正。
    • 实际上我使用的是 DataMapper 而不是 Active Record。那么你能告诉我我需要做什么改变吗?
    • 尝试使用 DataMapper 或您正在使用的任何工具获取不存在的记录,并查看它给出的错误并将 ActiveRecord::RecordNotFound::Error 替换为该特定错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2022-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多