简体   繁体   English

在Rails 4中索取规格

[英]Request spec in Rails 4

I am doing a rather trivial request spec but cannot make it pass. 我正在做一个相当琐碎的请求规范,但无法使其通过。 Any hint would be much appreciated :). 任何提示将不胜感激:)。

CheckoutController:

def create_membership
  ...
  if @membership.save
    redirect_to checkout_payment_path(id: @membership.id)
  ...
end

def payment
  @membership = Membership.find(params[:id])
  @transaction = Transaction.new
  @transaction.amount = @membership.product.price
  ... 
end

Routes:
  namespace :checkout do
    get 'payment'
  end

RSpec:
  let(:member) { create(:member) }
  let(:membership) { create(:membership, member: member) }
  let(:transaction) { create(:transaction, membership: membership) }

  describe "GET 'payment'" do
    it "return transaction" do
      Membership.any_instance.stub(:find).and_return(membership)
      get :payment, id: membership.id 
      assigns(:transaction).should be_a_new(Transaction)
      ...
    end
  end

I have setup Factories so that for each created membership, an associated product is created hence @membership.product.price is valid. 我已经设置了工厂,以便为每个创建的成员资格创建一个关联的产品,因此@membership.product.price有效。

The rspec failed at this line get :payment, id: membership.id . rspec在此行get :payment, id: membership.id失败: get :payment, id: membership.id Error says undefined method 'price' for nil:NilClass . 错误显示undefined method 'price' for nil:NilClass I am sure I have setup instance variable before test correctly. 我确定在正确测试之前,我已经设置了实例变量。 Did I make any small mistake here? 我在这里犯了小错误吗?

Cheers 干杯

Drop the .any_instance from your stub: 从存根中删除.any_instance:

Membership.stub(:find).and_return(membership)

The payment method is doing a find on the Membership class, not an instance of Membership. 付款方式是在Membership类上查找,而不是Membership实例。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM