【发布时间】:2015-06-18 18:33:09
【问题描述】:
这是我的控制器:
class PlansController
def use_new_card
@user = User.find_by_id(new_card_params[:user_id])
if new_stripe_card
...
end
private
def new_card_params
params.permit(:user_id, :stripeToken)
end
def new_stripe_card
StripeService.new({user_id: @user.id, customer_id: @user.stripe_customer_id, source: new_card_params[:stripeToken]}).new_card
end
end
我正在尝试编写一个控制器规范,测试当 use_new_card 方法的正确参数为 POST 时,new_stripe_card 的 StripeService.new 会正确获取这些参数。
到目前为止,我的规范看起来像这样:
describe "when proper params are passed" do
before do
@user = User.create(...)
end
it "should allow StripeService.new to receive proper parameters" do
StripeService.should_receive(:new).with({user_id: @user.id, customer_id: @user.stripe_customer_id, source: "test"})
post :use_new_card, user_id: @user.id, stripeToken: "test"
end
end
但是我得到了
Failure/Error: post :use_new_card, user_id: @user.id, stripeToken: "test"
NoMethodError:
undefined method `new_card' for nil:NilClass
完全公平,但我不知道如何解决这个问题...我不能只存根 new_card,因为 nil 对象上的存根方法仍会引发此错误(我尝试添加 @987654330 @已经进入before块)
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 rspec controller rspec-rails