Rails:对于API,我应该编写单元/功能/集成测试用例?

时间:2017-04-26 20:19:43

标签: ruby-on-rails api rspec-rails

我有rails微服务应用程序我想写测试用例,我想有建议

  1. 对于API,可用的类型测试用例是什么?
  2. 我应该写什么类型的测试用例/功能/单元/集成?
  3. 如果我们在API的背景下讨论它,功能/单元/集成有什么区别?
  4. 注意:我的应用程序具有聊天,预订,付款等功能

1 个答案:

答案 0 :(得分:1)

嗯,首先。您应该了解API它只是一个控制器。因此,您只需检查您的api的动作是否做正确的事(crud或任何其他事情)并返回适当的字段。将这个'东西'移动到某个命令(这是一个模式)要好得多,例如像this这样的宝石。

在这种情况下,您的测试将更容易支持/维护。因为在“控制器”规范中,您只需检查您的响应内容。对于“正确的行动”(例如创建记录)将响应您的命令。 因此,最后您将对命令和控制器进行测试。您的控制器规范将仅检查序列化程序返回的值的存在(例如AMS)。

使用命令,所有控制器将如下所示:

def action
  data = SomeImportantCommand.new(param1: params[:user], param2: param[:form]).call
  respond_with data, serializer: Api::V1::SomeEpicSerializer
end

这是伪代码,但它显示了命令用法的概念。

这种方法比较复杂,但它有优势。

  1. 您正在使用可以与控制器分开测试的命令(这里有您的所有业务逻辑)。
  2. 对于少数命令,可以分割出困难的逻辑。
  3. 由于第二个列表项,您将只进行控制器测试,易于维护。您可以绝对确定前端应用程序/开发人员将收到所有必要的数据。
  4. 控制器的所有规格如下:

    it 'returns some json' do
    
      get '/api/v1/users'
      expect(response.status).to eq 200
      expect(response.body).to have_node(:name).with('Ivan')
      # check other fields if you want
    end
    

    在上面的代码api_matchers中,gem用于解析json响应。

    P.S。你还需要对模型进行测试,但这是普通的事情,对于API来说没什么特别的。