测试 [rspec] controller spec 的一个 example 里前后两个 request, 后者使用了前者的 params

snowhs · 2013年01月30日 · 最后由 snowhs 回复于 2013年02月05日 · 2344 次阅读

设我们有

# app/controllers/posts_controller.rb
class PostsController
  def create
  end

  def index
  end
end

# spec/controllers/posts_controller_spec.rb
describe PostsController do
  describe :index do
    before do
      post :create content: 'Lorem lipsm'
      get :index
    end

    expect(respond).to be_success
  end
end

若观察 log/test.rb, 会发现 GET posts#index的参数里有POST posts#create时的content, 原因是什么呢?

为什么要先 post :create 呢?直接 create 不就行了?

#3 楼 @snowhs 这一种是 request/integration 的时候测的吧,controller test 跟 unit test 一样,都是特定的上下文环境,这样才可以排除其他因素的影响,确保一个 action/method 的正确。

另外

post :create content: 'Lorem lipsm'

不是少了个,吗

需要 登录 后方可回复, 如果你还没有账号请 注册新账号