首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mocha是否在存根(Rails)中运行代码?

mocha是否在存根(Rails)中运行代码?
EN

Stack Overflow用户
提问于 2009-12-08 20:21:29
回答 1查看 968关注 0票数 2

我是tdd和存根的新手。当我存根一个方法时,我假设该方法中的任何代码都不会被执行?我试图伪造该方法,引发一个异常,但我的测试结果表明,该方法中的代码正在执行而不是被绕过。

有谁能解释一下原因吗?

我的短桩是

代码语言:javascript
复制
@logged_in_user.subscription.stubs(:stop_auto_renew).raises(:RuntimeError)

并且在上下文中

代码语言:javascript
复制
test "canceling subscription should handle exception raised by spreedly" do
    login_larry_active
    @logged_in_user.subscription.stubs(:stop_auto_renew).raises(:RuntimeError)
    delete :destroy, {:user_id => @logged_in_user.id}
    assert flash[:notice]
    assert_redirected_to :controller => :dashboard, :action => :welcome
end

这是我的模型中的方法,我正在尝试存根。Spreedly::Subscriber通常会从网络上获取内容。

代码语言:javascript
复制
class Subscription < ActiveRecord::Base
    protected
    def stop_auto_renew
        Spreedly::Subscriber.find(self.user.id).stop_auto_renew()
    end
end

-

代码语言:javascript
复制
class SubscriptionsController < ApplicationController    
    def destroy
        user = User.find(params[:user_id])
        if user
            begin
                user.subscription.stop_auto_renew
            rescue RuntimeError
                #log something and email admin
                ldb("Spreedly cant process stop_auto_renew for user id: #{user.id}")
                #email admin
            end
            flash[:notice] = "You have successfully cancelled your subscription and will take effect at the end of your current billing month"
        end    
        redirect_to :controller => :dashboard, :action => :welcome
    end
end

测试误差是

代码语言:javascript
复制
4) Error:
test_canceling_subscription_should_handle_exception_raised_by_spreedly(SubscriptionsControllerTest):
NoMethodError: You have a nil object when you didn't expect it!
The error occurred while evaluating nil.stop_auto_renew
    app/models/subscription.rb:18:in `stop_auto_renew'
    app/controllers/subscriptions_controller.rb:31:in `destroy'
    /test/functional/subscriptions_controller_test.rb:42:in `test_canceling_subscription_should_handle_exception_raised_by_spreedly'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-10 04:49:30

我可能是错的,但我的猜测是,您已经将方法:stop_auto_renew存根到了对象@logged_in_user.subscription上(我假设用户有订阅?)但是,调用实际上是在从控制器中的User.find(params[:user_id])创建的另一个实例上进行的。

也许可以尝试Subscription.any_instance.stubs(:stop_auto_renew)...,它应该存根一个订阅的所有实例。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1866618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档