使用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做的其他尝试,都没有将选项传递给它。 只是想知道是否有人对如何做到这一点有任何见解。 谢谢!

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

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

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