我已经对该主题进行了一些谷歌搜索,但我仍然感到困惑。
我正在使用 Zendesk API Ruby 客户端构建自定义帮助页面,并且我正处于需要测试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: 'joe@test.com'
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
这是门票控制器的相关部分。该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 应用程序方面还是比较新的,所以一个清晰的解释会很棒。
提前致谢!!你真棒。