我已经对该主题进行了一些搜索,但我仍然感到困惑。
我正在使用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] 删除。
我来说两句