【发布时间】:2016-07-07 14:24:29
【问题描述】:
设置
在其中一个控制器操作中,我们有一个外部服务依赖项,如下所示:
def delete
@user = User.find(params[:id])
# Fail if the user is registered on SomeService
external = SomeService::Client.new(app_id: SOME_ID, api_key: SOME_KEY)
if external.users.find(user_id: @user.id)
fail Error::SomeService::ResourcePresent
end
@user.destroy!
render nothing: true, status: :ok
end
还有一个测试动作的非常简单的规范:
context "#delete" do
it "should return the correct success status" do
user = User.create!(email: "john@smith.com", password: "12345678")
delete :delete, id: user.id
expect(response).to have_http_status(:ok)
end
end
问题
我想将控制器操作与其对SomeService 的依赖隔离开来,只测试user 的实际删除。
什么是绕过外部以便我的测试可以通过的好方法?
【问题讨论】:
-
模拟服务对象并存根
users和find方法,这样您的条件总是失败? -
但是我该如何模拟服务对象呢?以前没有这样做过。
标签: ruby-on-rails rspec mocking dependencies isolation