在我SubscriptionsController
我:如何在rails和rspec中模拟链接关联?
# DELETE /subscription # {{{
def destroy
@subscription = current_user.subscriptions.find params[:id]
@subscription.cancel!
redirect_to subscriptions_path, :notice => "Abonnement beendet."
end# }}}
什么是模拟出在我的控制器,规格current_user.subscriptions.find params[:id]
正确的方法是什么?
目前我正在尝试在我之前的块。
double(Subscription)
controller.current_user.stub!(:subscriptions).and_return(Subscription)
Subscription.stub!(:find).and_return(subscription)
但这看起来不像预期的那样工作,因为我的RSpec-Expectations不起作用。
it "updates the status to canceled" do
sub = Subscription.stub!(:find).and_return(subscription)
sub.stub!(:cancel!)
sub.should_receive :cancel!
delete :destroy, :id => 1
end
这一块总是失败的因为...期望should_receive
不满足:
1) SubscriptionsController DELETE /subscription/:id updates the status to canceled
Failure/Error: sub.should_receive :cancel!
(#<Proc:[email protected]/Users/nilsriedemann/.rvm/gems/[email protected]/gems/rspec-mocks-2.6.0/lib/rspec/mocks/message_expectation.rb:63 (lambda)>).cancel!(any args)
expected: 1 time
received: 0 times
# ./spec/controllers/subscriptions_controller_spec.rb:38:in
# `block (3 levels) in <top (required)>'
# '
此外,如果有人滴不错链接到有关磕碰透彻的文章,在评论嘲讽,我会很高兴的离谱。仍然(显然)没有得到这一点。
这对我来说非常合适,所以谢谢!我也尝试一下存根链的几个属性,但它不起作用。你必须为每个属性声明一个单独的'#stub_chain'。这对某些人来说可能是显而易见的,但它让我绊了一会儿,所以我想我会分享。 – 2013-09-06 15:30:43