Rspec: everyday-rspec实操。第7章使用请求测试-测试API

Posted Mr-chen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rspec: everyday-rspec实操。第7章使用请求测试-测试API相关的知识,希望对你有一定的参考价值。

测试应用与非人类用户的交互,涵盖外部 API 

 

7.1request test  vs feature test 

 

RSpec 来说,这种专门针 对 API 的测试最好放在 spec/requests 目录中,与前面编写的功能测试分开。

这种测试也不使用 Capy- bara,因为它模拟的是浏览器交互,而不是程序交互。

我们要使用的是前面测试控制器响应的 HTTP 动 词:getpostdelete patch。 

end-point:端点。 

 

7.2测试GET请求 

 

请求测试与控制器测试不通的地方在于,它不限定于特定的控 制器,可以使用应用的任何路由 

bin/rails g rspec:request projects_api 

create  spec/requests/projects_apis_spec.rb 

 

    it "loads a project" do
      user = FactoryGirl.create(:user)
      FactoryGirl.create(:project, name:"Sample Project")
      FactoryGirl.create(:project, name:"Second Sample Project", owner: user)
#发送HTTP GET请求,为了验证身份, API 要求提供用户的电子邮件地址和验证令牌,因此我们将其放到参数中 
      get api_projects_path, params:{
        user_email: user.email,
        user_token: user.authentication_token
      }
      expect(response).to have_http_status(:success)

#调试:看看response.body是什么。一个array,包含了登陆用户的projects的信息.

[{"id":2,"name":"Second Sample Project","description":"A test project.","due_on":"2018-05-26","created_at":"2018-05-19T07:30:14.169Z","updated_at":"2018-05-19T07:30:14.169Z","user_id":1}] 

      byebug  
      puts "---#{response.body}---"
      json = JSON.parse(response.body)
      puts "---#{json}---" 
      byebug

#调试:转化为json ,: 变为 =>

[{"id"=>2, "name"=>"Second Sample Project", "description"=>"A test project.", "due_on"=>"2018-05-26", "created_at"=>"2018-05-19T07:30:14.169Z", "updated_at"=>"2018-05-19T07:30:14.169Z", "user_id"=>1}] 

      expect(json.length).to eq 1
      project_id = json[0]["id"]
      puts "---#{project_id}---"
      byebug
# 期望json的数据是一条,之后获取这个project的??。用于再次请求API,获得这个project的详细信息。
      get api_project_path(project_id), params:{
        user_email: user.email,
        user_token: user.authentication_token
      }
      expect(response).to have_http_status(:success)
      json = JSON.parse(response.body)
      expect(json[‘name‘]).to eq "Second Sample Project"

#最后,解析第二次请求返回的JSON数据。看看是否match. 

    end

 

7.3 测试POST请求 

 

 

 

 

 

 

 

 

 

以上是关于Rspec: everyday-rspec实操。第7章使用请求测试-测试API的主要内容,如果未能解决你的问题,请参考以下文章

Rspec: everyday-rspec实操。5:controller test(了解基础)

ruby Rspec测试的最大命中:第1卷

使用登录设计的Rspec测试只工作一次

无法生成 rails 命令:bundle exec rspec spec/requests

rspec 中未处理延迟作业

RSpec 测试不允许两个用户使用相同的电子邮件地址