【问题标题】:Rspec testing find_or_create methodRspec 测试 find_or_create 方法
【发布时间】:2015-06-04 10:13:54
【问题描述】:

我检查了我的 simplecov 结果,我已经看到了

    record = User.where("fb_id = ? or email = ? ", params[:fb_id], params[:email]).first_or_create do |rows|
      rows.first_name = params[:first_name]
      rows.last_name = params[:first_name]

等(do |rows| 之后的所有变量)都没有涵盖。

任何想法,我该如何测试这些东西?

【问题讨论】:

    标签: ruby-on-rails rspec mocking simplecov


    【解决方案1】:

    只有在where 子句没有匹配项时才会调用该块:

    http://apidock.com/rails/ActiveRecord/Relation/first_or_create

    更新

    您的测试存根User 如下:

    expect(User).to receive_message_chain(:where, :first_or_create).and_return(user)

    您需要第二次测试,其中where 返回一个空结果集,而不是用户,以验证块中行的行为。

    【讨论】:

    • 我的第一个或创建方法已经过测试。我需要测试我之前描述过的变量
    • 我不明白你的意思。也许您可以编辑您的帖子以显示您的测试。
    • 我已经用截图更改了第一篇文章
    • 这并没有真正的帮助。请出示实际测试代码。
    • 我对我的回复做了一个小的更正。试试expect(User).to receive(:where).and_return([])。查看apidock.com/rails/ActiveRecord/Relation/first_or_create 的实现可能会有所帮助(点击显示源代码)。
    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多