Ruby on Rails:从rake任务执行POST

时间:2014-03-29 21:46:23

标签: ruby-on-rails-4 rake

我想使用rake任务在我的数据库中播放一些用户数据以进行手动测试。由于我的表和业务逻辑的复杂性,我这样做的最简单方法是从rake任务执行POST到我的user_controller。使用RSpec(和FactoryGirl),我可以做到

   describe "POST create" do
        it "registers a new user" do
            @request.env["devise.mapping"] = Devise.mappings[:user]
            user = attributes_for(:user)
            response = post( :create, user: user)
            response.status.should eql(200)
        end
    end

我如何使用'帖子'我的佣金任务中的助手?

1 个答案:

答案 0 :(得分:2)

创建lib/tasks/seed_post.rake文件的名称并不重要

并将以下代码放入其中

namespace :seed do
  task :posts => :environment do
    50.times do |i|
      # it's your own problem to generate the following user, params so that it works
      Post::CreationService.perform(user, params)
    end
  end
end

现在您可以使用.. rake seed:postszeus rake seed:postsbundle exec rake seed:posts来调用该任务,具体取决于您使用的是zeus还是捆绑包还是其他...

真正重要的是你的电话应该采用

的形式

rake namespace_you_defined:task_name_you_defined

您还必须将控制器创建更改为

def create
  @post = Post::CreationService.perform(current_user, post_params)
  # instead of this old code i'm assuming you are using
  @post = current_user.posts.create!(post_params)
  ...
end

还要添加此文件

# app/services/post/creation_service.rb
class Post::CreationService
  def self.perform(current_user, params)
    current_user.posts.create!(params)
   end
end