Oauth/Zoom API 发布请求 - Mocha 集成测试失败并显示 400客户端错误,而应用程序本身似乎可以工作

如何解决Oauth/Zoom API 发布请求 - Mocha 集成测试失败并显示 400客户端错误,而应用程序本身似乎可以工作

我无法理解为什么集成测试不适用于以下代码代码工作如下; “makeOauthRequest”函数向 Oauth API 发出请求以检索访问令牌。 “createMeeting”函数接收访问令牌并使用它向 Zoom API 发出发布请求。

如果我使用与测试文件中相同的调用(使用 'createMeeting("Please Work API","2021-04-26T19:20:00Z ")'),它将工作并成功发出发布请求。但是,根据下面的测试文件,当我通过 Mocha 进行相同的调用时,它会引发 400 错误。有人可以帮我理解为什么存在这种差异吗?

我已经在测试文件中记录了环境变量,以检查测试理解它们是否存在问题,但它们看起来没问题。

// Test file

const funcs = require("../auto/autoNeg.js");
const assert = require("chai").assert;
require("dotenv").config({ path : '/Users/frederickgodsell/codefiles/mokapot/auto/.env'});

 describe('Simple integration',function() {
    it('Integration works',async function() {
      const resp = await createMeeting("Please Work API","2021-04-26T19:20:00Z");
      console.log(resp)
    });
  });

// Fails with 'Error: Request Failed with status code 400'
// App file

const axios = require("axios").default;
require("dotenv").config();
const fs = require("fs");


const jsonString = fs.readFileSync(`/Users/frederickgodsell/codefiles/mokapot/refresh.json`);
const fileData = JSON.parse(jsonString);
const refTok = fileData.refresh_token;

const oathOptions = {
  headers: {
    Authorization:
      "Basic " +
      Buffer.from(process.env.ID + ":" + process.env.SECRET).toString("base64"),},params: {
    grant_type: "refresh_token",refresh_token: refTok,};

makeOauthRequest = async () => {
  try {
    const oauthPostRequest = await axios.post(
      "https://zoom.us/oauth/token",{},oathOptions
    );
    let accessplusRefresh = JSON.stringify(
      await oauthPostRequest.data,null,2
    );
    fs.writeFile(`/Users/frederickgodsell/codefiles/mokapot/refresh.json`,accessplusRefresh,(error) => {
      if (error) {
        console.log("Error writing file",error);
      } else {
        console.log("JSON file sucessfully updated");
      }
    });
    // console.log(oauthPostRequest.data)
    
    return oauthPostRequest.data;
  } catch (error) {
    console.log(error);
  }
};




createMeeting = async (topic,startTime) => {

  let meetingBody = {
    topic: topic,start_time: startTime,};

  let response = await makeOauthRequest();
  let accesstoken = await response.access_token;

  const meetingOptions = {
    headers: {
      authorization: `Bearer ${await accesstoken}`,"Content-Type": "application/json",};

  if (!topic || !startTime) {
      console.log('Please provide both a topic and a start time')
      return 'Please provide both a topic and a start time'
  }

  try {
    let meetingResponse = await axios.post(
      `${process.env.API_URL}`,meetingBody,meetingOptions
    );
    console.log(`Meetin booked. UUID : ${meetingResponse.data.uuid}`);
    return meetingResponse;
  } catch (err) {
    console.log(err.response.data);
  }
};


module.exports.createMeeting = createMeeting;
module.exports.makeOauthRequest = makeOauthRequest;
module.exports.oathOptions = oathOptions;
module.exports.refTok = refTok;

// package.json file for good measure

{
  "name": "mokapot","version": "1.0.0","description": "","main": "index.js","scripts": {
    "test": "mocha -r dotenv/config"
   
  },"author": "","license": "ISC","dependencies": {
    "axios": "^0.21.1","chai": "^4.3.4","dotenv": "^8.2.0","mocha": "^8.3.2","nock": "^13.0.11","sinon": "^9.2.4","supertest": "^6.1.3"
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?