可以检查Rspec测试中创建的对象但显示为空白?和!现在?

时间:2015-06-13 17:16:49

标签: ruby-on-rails ruby rspec

我有一个非常奇怪的案例,我发现我正在进行<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="outer"> <div id="inner"> <p id="content">Click Me</p> </div> </div>测试。

执行RSpec后,我可以执行my_model = MyModel.create我将获得该对象的所有创建属性,但是当我执行my_model.inspectmy_model.blank?时分别显示为my_model.present?true

我可以通过

进一步证明这种奇怪的行为
false

我得到相同的结果 - 可以检查对象,显示属性,但注册为空白而不存在。

真的很奇怪,我不能用这种行为写一个可靠的测试。怎么能这么明显地存在&#34;存在&#34;但是两者都是空白&#34;而不是&#34;现在&#34;?

以下代码显示了注释中的输出:

find_test = MyModel.find(my_model.id)

2 个答案:

答案 0 :(得分:0)

def self.find_or_create(id, current_user)
    cart = Cart.where(referral_guid: nil, id: id).first  
    if !priority_cart?(cart) && !current_user.nil?
        cart = Cart.where(referral_guid: current_user.referral_guid).order("id DESC").first
    end

    cart.update_cart_with_referral_guid(current_user) unless current_user.nil?
    cart = Cart.create unless cart
    ##### test 1 #####
    puts("cart.inspect: #{cart.inspect}") #<Cart id: 2, created_at: "2015-06-13 17:39:57", updated_at: "2015-06-13 17:39:57", price_total: nil, tax: nil, referral_guid: nil>
    puts("cart.present?: #{cart.present?}") #false
    puts("cart.blank?: #{cart.blank?}") #true

    ##### test 2 #####
    find_test = Cart.find(cart.id)

    puts("find_test.inspect: #{find_test.inspect}") #<Cart id: 2, created_at: "2015-06-13 17:39:57", updated_at: "2015-06-13 17:39:57", price_total: nil, tax: nil, referral_guid: nil>
    puts("find_test.present?: #{find_test.present?}") #false
    puts("find_test.blank?: #{find_test.blank?}") #true
    cart
end

答案 1 :(得分:0)

blank?是一个Rails方法,定义如下:

def blank?
  respond_to?(:empty?) ? !!empty? : !self
end

present?只是相反的。

换句话说,它在很大程度上取决于模型是否/如何响应empty?方法。

你还没有提供Cart类的定义,也许你正在使用一些框架,但假设这是某种形式的“购物车”,那么定义它是很自然的一个empty?方法,只有当它包含“包含”项时才返回true。由于您刚刚创建了购物车对象并且未在其中放置任何物品,因此它很自然会“空”。