在rspec中使用传递的参数测试rake任务

时间:2013-10-18 15:28:27

标签: ruby-on-rails ruby rspec rake

在rspec中,我想测试一个rake任务并传入一些参数,所以在命令行中你可以运行它:

rake commissions:create_price_points options=1,2,3

在rake任务中我使用ENV ['options']。

在我的rspec中我有

rake = get_rake_environment(RAKE_FILE)
rake["commissions:create_price_points"].invoke(options=1,2,3)

这样可以很好地运行rake,但是这个以及我使用invoke和execute进行的其他尝试都没有将选项传递给它。只是想知道是否有人对如何做到这一点有任何见解。谢谢!

1 个答案:

答案 0 :(得分:2)

传递给invoke方法的参数与rake命令行中传递的参数不同。在RSpec(Ruby)中,表达式options=1,2,3将数组[1,2,3]分配给局部变量options,并将该数组传递给invoke。当被invoke方法接收时,该数组被视为rake任务的正式参数。 (有关此方法的更多信息,请参阅https://stackoverflow.com/a/825832/1008891。)

由于您的rake任务期望设置环境变量options,因此您需要在调用之前设置它,如:

ENV['options'] = '1,2,3'