小编Mar*_*a K的帖子

如何在Rails中使用Rspec来存根错误?

我是Rails和Rspec的新手,我正在使用Rspec来测试这个包含异常处理的控制器方法:

def search_movies_director
  @current_movie = Movie.find(params[:id])
  begin
    @movies = Movie.find_movies_director(params[:id])
  rescue Movie::NoDirectorError
    flash[:warning] = "#{@current_movie} has no director info"
    redirect_to movies_path
  end
end
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何正确测试所述路径:无效搜索后(收到错误时)它应该重定向到主页.我试过这样的事情:

describe MoviesController do
  describe 'Finding Movies With Same Director' do
    #some other code

    context 'after invalid search' do
      it 'should redirect to the homepage' do
        Movie.stub(:find)
        Movie.stub(:find_movies_director).and_raise(Movie::NoDirectorError)
        get :search_movies_director, {:id => '1'}
        response.should redirect_to movies_path
      end
    end

  end
end
Run Code Online (Sandbox Code Playgroud)

运行测试后失败并显示错误: NameError: uninitialized constant Movie::NoDirectorError

如何伪造在此测试中引发错误,以便它实际检查重定向是否发生?

谢谢!

更新:

正如nzifnab解释的那样,它找不到Movie::NoDirectorError.我忘了定义这个异常类.所以我把它添加到app/models/movie.rb:

class Movie < ActiveRecord::Base …
Run Code Online (Sandbox Code Playgroud)

ruby unit-testing rspec ruby-on-rails stubbing

16
推荐指数
2
解决办法
2万
查看次数

条带计费:未选择计划且在注册时未输入信用卡的试用

我读过这篇文章Stripe - 如何处理订阅免费计划,并且在注册时不需要信用卡,并且发现它非常有帮助,但我仍然有一个问题.

我的应用程序有两个付费计划:'基本'和'专家'.注册用户选择计划,也不输入卡详细信息.基本上,用户在前14天使用通用试用计划,在此试用期结束后,用户必须选择付费计划并输入卡详细信息.

处理此试验的最佳方法是什么?我在想这些方法:

a)由于我不知道用户在试用期满后将选择哪种付费方案,我无法使用Stripe试用期功能.

来自Stripe Docs:创建计划时,您可以设置的其中一个选项是试用期将持续多长时间.如果您确实选择提供试用期,则在试用期结束之前,您注册的客户将不会首次收费.

我想创建一个名为'trial'的条纹计划,金额设置为0.00美元,试用期为14天,间隔为2周.通过这种方式,我将能够收听Stripe webhook customer.subscription.updated以确定试用版是否已过期并相应地更新数据库.我不确定这是否是一个好方法,因为它将为此试用计划生成发票(它被设置为订阅).我喜欢Stripe webhooks.有没有更好的方法呢?

b)另一种选择是只在Stripe中有付费计划并在试用期到期时创建Stripe订阅并且用户必须选择计划并输入卡详细信息.这样我就不会使用Stripe检查试用版是否过期.我将检查用户登录以确定试用版是否仍处于活动状态.

谢谢你的帮助!

payment-gateway webhooks payment-processing stripe-payments

14
推荐指数
1
解决办法
5358
查看次数