使用RSpec测试API资源

未成年

我已经对该主题进行了一些搜索,但我仍然感到困惑。

我正在使用Zendesk API Ruby Client构建自定义帮助页面,并且正处于需要测试ZendeskAPI::Ticket资源创建的阶段以下代码位于spec / features目录中。它使用有效值填写表单,并将表单提交给#create操作。相当标准,简单的东西。

require 'spec_helper'

feature 'ticket creation' do
  scenario 'user creates new ticket' do
    visit root_path

    fill_in 'Name', with: 'Billybob Joe'
    fill_in 'Email', with: '[email protected]'
    fill_in 'Subject', with: 'Aw, goshdarnit!'
    fill_in 'Issue', with: 'My computer spontaneously blew up!'
    click_button 'Create Ticket'

    expect(page).to have_content('Ticket details')
  end
end

这是Tickets控制器的相关部分。ticket_valid?方法提供了对选项哈希的最小验证,并且client是的实例ZendeskAPI::Client

def create
  options = { subject: params[:subject], comment: { value: params[:issue] }, 
              requester: params[:email], priority: 'normal' }
  if ticket_valid? options
    flash[:success] = 'Ticket created.'
    @ticket = ZendeskAPI::Ticket.create(client, options)
    redirect_to ticket_path(@ticket.id)
  else
    flash[:error] = 'Something went wrong. Try again.'
    redirect_to root_url
  end
end

问题是,每当我运行测试时,都会在Zendesk后端中创建一个实际的票证,当我只想测试成功提交表单而没有实际创建票证时,必须稍后手动删除该票证。

所以我的问题是,每次运行测试时如何在没有在Zendesk后端中创建实际票证的情况下测试票证创建表单?

由于谷歌搜索而导致我一直阅读的文章和博客含糊地提及使用RackTest,而其他人则建议完全不使用Capybara进行此类操作,这使我更加困惑。我对RSpec还是一个新手,对于使用API​​构建Rails应用程序来说还是比较新手,所以一个清晰的解释将是很棒的。

提前致谢!!你真棒。

彼得·阿尔夫文

如果您不想呼叫Zendesk,则必须创建一个“ test double”,而不是实际的呼叫。RSpec附带的测试双重功能在https://github.com/rspec/rspec-mocks进行了最少描述,但在博客和书籍中更全面地介绍了该功能。

同时发布的答案讨论了如何创建单独的类,但似乎仍涉及创建Zendesk票证。实际上,您不需要单独的类,也根本不需要创建任何ZendeskAPI对象。取而代之的是,您将存根ZendeskAPI::Ticket#create以返回测试双精度,而这又需要提供其余测试所需的任何Zendesk票证方法,其中至少包括id

使用水豚实际上是一个次要问题,它指的是您如何进行测试。但是请注意,您的测试当前需要呈现票证页面并检查该页面的内容。如果您想测试“仅”控制器,则可以/应该测试它是否进行了正确的调用(例如ZendeskAPI::Ticket),并重定向到相应的页面。此外,如果您只是这样做,那么在测试倍数中进行模拟的内容就更少了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ruby on Rails 4:使用rspec无法测试嵌套资源

来自分类Dev

使用RSpec测试Rails REST API

来自分类Dev

使用嵌套资源和私有方法使用rspec测试Rails控制器

来自分类Dev

使用RSpec测试块

来自分类Dev

使用rspec测试Perl?

来自分类Dev

如何在Rails上使用rspec和capybara测试API?

来自分类Dev

Rspec测试API版本控制

来自分类Dev

Ruby - Airbourne Rspec API 测试

来自分类Dev

如何在使用Rspec的请求测试中更改子域(用于API测试)

来自分类Dev

使用Rspec测试Sidekiq工人

来自分类Dev

使用rspec测试Ruby模块

来自分类Dev

使用RSpec 3测试模块

来自分类Dev

使用RSpec测试多态关联

来自分类Dev

如何使用RSpec测试记忆?

来自分类Dev

使用RSpec测试多态关联

来自分类Dev

使用RSpec测试SuckerPunch :: Job

来自分类Dev

使用Rspec测试-正确的方法

来自分类Dev

使用RSpec测试Ajax搜索

来自分类Dev

使用RSpec测试Cancancan能力

来自分类Dev

如何使用RSpec测试negamax?

来自分类Dev

RSpec测试失败,资源路由“没有路由匹配”

来自分类Dev

RSpec测试失败,资源路由“没有路由匹配”

来自分类Dev

使用Jasmine测试AngularJS资源

来自分类Dev

如何为GoogleDrive API编写RSpec测试

来自分类Dev

子域上的rspec POST api测试

来自分类Dev

如何对使用REST API和RSpec的方法进行单元测试?

来自分类Dev

使用RSpec请求规范测试JSON API的最佳方法是什么

来自分类Dev

如何测试控制器帖子:使用 rspec 在 rails 上创建 JSON api?

来自分类Dev

如何使用IPP API资源管理器测试ChangeDataCapture?