Ruby on rails 嘲笑我的控制器的正确方式是什么;创建';包括使用mocha调用外部API的操作
我正在经历一个有点困难的学习过程来测试createcontroller操作,该操作使用Rails、mocha和webmock调用外部api。下面是我要测试的控制器代码Ruby on rails 嘲笑我的控制器的正确方式是什么;创建';包括使用mocha调用外部API的操作,ruby-on-rails,unit-testing,mocha.js,Ruby On Rails,Unit Testing,Mocha.js,我正在经历一个有点困难的学习过程来测试createcontroller操作,该操作使用Rails、mocha和webmock调用外部api。下面是我要测试的控制器代码 def create @response = Cdnify.create_cdn_resource(cdn_params) if @response.parsed_response['resources'] flash[:notice] = 'Successfully Created Resour
def create
@response = Cdnify.create_cdn_resource(cdn_params)
if @response.parsed_response['resources']
flash[:notice] = 'Successfully Created Resource.'
else
@response.parsed_response['errors'].each do |error|
flash[:error] = "#{error['code']}" + ': ' + "#{error['message']}"
end
end
redirect_to cdns_path(ssl_slug: @ssl_slug)
end
这是一个直截了当的测试,但我对如何测试这段代码感到特别困惑,尤其是在模拟外部api调用时。我已经看了这些stackoverflow问题,但是在让webmock存根成为请求,然后从那里转到我的flash消息和重定向方面,我仍然有一段困难的时间。以下是我使用过的资源:
下面是我的测试代码:
describe 'create' do
it 'correctly creates a cdn resource, redirects to cdns#index, and shows successful flash message' do
params = {api_key: 'api_key_123456',
resource_name: 'somewebsite', resource_origin: 'http://www.somewebsite.com' }
####### Is this correct in definition and where its placed in the code? #######
####### Do I have to use webmock to create by hand the response from vcr gem? #######
Cdnify.expects(:create_cdn_resource).with(params)
###### Am I suppose to execute this? #######
post :create, params: params
assert flash[:notice]
end
结束
我已经在这段代码中添加了我的问题,但我不知道代码的流程应该如何进行?我是不是先模仿Cdnify
类方法,然后再调用post?我甚至需要在代码中使用post
调用吗?当我执行post
代码时,vcr不知道如何处理请求,所以我应该手工制作响应
?那它去哪里了
基本上,我需要一些帮助来创建这个非常基本的测试。我有一种感觉,它应该是简单的,但我有一个困难的时候,试图结合所有这些新的信息正确和一些帮助将不胜感激。谢谢。我想你可以在minitest中使用。在rspec模拟中,您只需要使用but。@max,我将存根放在哪里,这就是我被卡住的地方。是在通话前还是通话后?我在模拟之前没有通过测试,因为没有发出post请求。后来当我把它放好时,录像机坏了,告诉我它不知道如何处理这个请求。我有点困在这里了。您认为您可以提供一些示例代码吗?