簡體   English   中英

如何測試使用 Rest API 的 oclif CLI

[英]How can I test oclif CLI that consumes Rest API

如何在 Oclif 中使用 Typescript 測試以下代碼構建? 此 CLI 使用帶有 node.js 和 express.js 的 rest api 構建。 我正在用我熟悉的 mocha/chai 測試我的 api。 但是,我在 oclif 站點上看到了有關測試的示例,但除此之外沒有實際幫助進行測試。 如何測試以下代碼,它是來自我的 cli 的命令?

import cli from 'cli-ux'
// just prompt for input
import {Command} from '@oclif/command'
import {createConnection} from "typeorm";
import {flags} from  '@oclif/command'
const bcrypt = require('bcrypt');
var fs=require('fs');
const https = require('https')
const axios=require('axios');
const client_cert = fs.readFileSync('ca-crt.pem')
axios.defaults.httpsAgent = new https.Agent({ca : client_cert, keepAlive: true})
export class AdminCommand extends Command {
  static flags = { 
    newuser: flags.string({dependsOn:['passw'],exclusive:['newdata','userstatus','moduser']}),
    moduser: flags.string({dependsOn:['passw'],exclusive:['newuser','newdata','userstatus']}),
    passw: flags.string({dependsOn:['email']}),
    email: flags.string({dependsOn:['quota']}),
    quota: flags.string(),
    userstatus: flags.string({exclusive:['newdata','newuser','moduser']}),
    newdata: flags.string({dependsOn:['source'],exclusive:['userstatus','newuser','moduser']}),
    source: flags.string()
  }
  async run() {
    const {flags} = this.parse(AdminCommand); 
    var fs=require('fs');
    var jwt=require('jsonwebtoken');
    var token = fs.readFileSync('softeng19bAPI.token','utf-8');
    axios.defaults.headers.common['X-OBSERVATORY-AUTH']=token;
    await cli.anykey();
    //create new user
    if (`${flags.newuser}` !== "undefined" && `${flags.passw}` !== "undefined" && `${flags.email}` !== "undefined" && `${flags.quota}` !== "undefined" ){
            let hash = bcrypt.hashSync(`${flags.passw}`,10);
            let body = new Object ({
                username: `${flags.newuser}`,
                passw: `${flags.passw}`,
                email: `${flags.email}`,
                quota: `${flags.quota}` 
            })
            await axios.post('https://localhost:8765/energy/api/Admin/users',body);

    } }

Oclif 測試部分包含一個使用 nock模擬HTTP 請求的示例。 為了測試這一點,我會:

  1. 使用 nock 模擬您的帖子請求
  2. 如果 post 請求成功,則提示成功消息並斷言
  3. 如果 post 請求失敗,提示錯誤消息並斷言

CLI 是一個用戶界面,它讓我在測試時更容易想到它。 因此,設計您的測試以斷言 CLI 輸出並為業務邏輯使用單元測試。


// Success test case, assuming the command name is 'admin:create'

  
describe('admin', () => {

  const newUser = {...}

  test
  .stdout()
  .nock('https://localhost:8765', api =>
    api
    .persist()
    .post('/energy/api/Admin/users')
    .reply(200, newUser)
  )
  .command('admin:create')
  .it('shows success message when user is created', ctx => {
    expect(ctx.stdout).to.contain('User was successfully created.')
  })
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM