1

给定

context "stripe customer" do
  subject { @customer = Stripe::Customer.retrieve @subscription.stripe_customer_token }

  it "show me email" do
    p @customer.email
    p user.email
    @customer.email.should == user.email
  end

  #its(:email) { should == user.email }
  its(:description) { should == user.email }
end

it块中,这通过了。注释掉的#its 部分没有通过。我得到两个不同的对象。 expected: "daniel3@example.com" got: "daniel133@example.com" (using ==)

这是因为database_cleaner宝石吗?某种方式我没有正确设置 factory/database_cleaner?

为什么它在它的块中不匹配,但在它的块中匹配?怎么可能不同?

4

1 回答 1

2

subject以一种奇怪的方式使用:你用它来设置一个实例变量,而不是用它作为期望的东西。

给定的块subject被懒惰地评估:只有当你的规范使用主题时才会评估它。对于您的its示例, rspecsubject为您调用,但对于您从未调用的其他示例subject,因此@customerused 可能是封闭上下文的宿醉

于 2013-06-02T00:02:34.707 回答