[英]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.