Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 嘲笑我的控制器的正确方式是什么;创建';包括使用mocha调用外部API的操作_Ruby On Rails_Unit Testing_Mocha.js - Fatal编程技术网

Ruby on rails 嘲笑我的控制器的正确方式是什么;创建';包括使用mocha调用外部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

我正在经历一个有点困难的学习过程来测试createcontroller操作,该操作使用Rails、mocha和webmock调用外部api。下面是我要测试的控制器代码

  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请求。后来当我把它放好时,录像机坏了,告诉我它不知道如何处理这个请求。我有点困在这里了。您认为您可以提供一些示例代码吗?