Ver Fonte

测试全部重构为mocha测试

龚成明 há 2 anos atrás
pai
commit
f451f4d8bd

+ 24 - 0
libs/binance/binance-kit.js

@@ -47,4 +47,28 @@ module.exports = class BinanceKit {
 
     return accountAssetMap
   }
+
+  static parsePriceTickFilterMap(exchangeInfoSymbols) {
+    const filterMap = {}
+
+    exchangeInfoSymbols.forEach(function(pairInfo) {
+      const filter = pairInfo.filters.filter(filterObj => filterObj.filterType === 'PRICE_FILTER')[0]
+
+      filterMap[pairInfo.symbol] = Math.log10(1 / parseFloat(filter.tickSize))
+    })
+
+    return filterMap
+  }
+
+  static parseLotSizeFilterMap(exchangeInfoSymbols) {
+    const filterMap = {}
+
+    exchangeInfoSymbols.forEach(function(pairInfo) {
+      const filter = pairInfo.filters.filter(filterObj => filterObj.filterType === 'LOT_SIZE')[0]
+
+      filterMap[pairInfo.symbol] = Math.log10(1 / parseFloat(filter.stepSize))
+    })
+
+    return filterMap
+  }
 }

+ 21 - 59
libs/binance/test/binance-spot-test.js

@@ -1,71 +1,33 @@
+const logger = require('../../../kit/logger-kit').getLogger('binance-spot-test')
 const BinanceSpot = require('../binance-spot')
 const BinanceKit = require('../binance-kit')
-const logger = require('../../../kit/logger-kit').getLogger('binance-spot-test')
 const Config = require('../../../config/config')
 const PrivateConfig = require('../../../PrivateConfig')
+const assert = require("assert");
 
-async function realPriceTest() {
-  logger.info('real price test:')
-  logger.info(await BinanceSpot.realPrice())
-  logger.info('')
-}
-
-async function exchangeInfoTest() {
-  logger.info('exchange info test:')
-  const pairs = Object.values(PrivateConfig.tokenMapping).map(coin => `${coin}${Config.baseIerc20Token.symbol}` )
-  const exchangeInfo = await BinanceSpot.exchangeInfo(pairs)
-
-  // logger.info(BinanceKit.parsePriceTickFilterMap(exchangeInfo.symbols))
-  logger.info('')
-}
-
-async function accountInfoTest(context) {
-  logger.info('account info test:')
-
-  const binanceSpot = context.binanceSpot
-
-  const accountInfoRst = await binanceSpot.accountInfo()
-  const accountAssetMap = BinanceKit.parseBalancesToAccountAssetMap(accountInfoRst.balances)
-
-  logger.info(accountAssetMap)
-}
-
-async function orderTest(context) {
-  logger.info('order info test:')
+describe('binance-spot-test', () => {
+  const context = {}
+  context.binanceSpot = new BinanceSpot(PrivateConfig.binanceAPIKey, PrivateConfig.binanceSecretKey)
 
   const binanceSpot = context.binanceSpot
 
-  const orderRst = await binanceSpot.buy('HOOKBUSD', -1, Config.baseTokenAmount)
-  logger.info(orderRst)
+  it('real price test', async () => {
+    logger.info(await BinanceSpot.realPrice())
+  })
 
-  if (orderRst.executedQty) {
-    const cummulativeQuoteQty = orderRst.cummulativeQuoteQty
-    let executedQty = 0
-    for (const fill of orderRst.fills) {
-      executedQty += parseFloat(fill.qty)
-      // 扣除支付的手续费
-      if (fill.commissionAsset === 'HOOK') {
-        executedQty -= parseFloat(fill.commission)
-      }
-    }
-    const price = cummulativeQuoteQty / executedQty
+  it('exchange info test', async () => {
+    const pairs = Object.values(PrivateConfig.tokenMapping).map(coin => `${coin}${Config.baseIerc20Token.symbol}` )
+    const exchangeInfo = await BinanceSpot.exchangeInfo(pairs)
 
-    logger.info(`消耗${Config.baseIerc20Token.symbol} ${cummulativeQuoteQty}, 买入${executedQty}, 均价${price}.`)
-    logger.info(await binanceSpot.sell('HOOKBUSD', -1, executedQty))
-  } else {
-    logger.error(orderRst)
-  }
-}
-
-async function main() {
-  const context = {}
-
-  context.binanceSpot = new BinanceSpot(PrivateConfig.binanceAPIKey, PrivateConfig.binanceSecretKey)
+    assert.notEqual(exchangeInfo.symbols, undefined, 'exchangeInfo获取失败,请重试。')
 
-  // await realPriceTest()
-  // await exchangeInfoTest()
-  // await accountInfoTest(context)
-  await orderTest(context)
-}
+    logger.info(BinanceKit.parsePriceTickFilterMap(exchangeInfo.symbols))
+    logger.info(BinanceKit.parseLotSizeFilterMap(exchangeInfo.symbols))
+  })
 
-main()
+  it('account info test', async () => {
+    const accountInfoRst = await binanceSpot.accountInfo()
+    assert.notEqual(accountInfoRst.balances, undefined, 'account info 获取失败')
+    logger.info(BinanceKit.parseBalancesToAccountAssetMap(accountInfoRst.balances))
+  })
+})

+ 8 - 25
libs/one-task.js

@@ -2,45 +2,28 @@ const OneTask = require('./task')
 const Context = require("./context");
 const Config = require("../config/config");
 const BinanceSpot = require("./binance/binance-spot");
+const BinanceKit = require("./binance/binance-kit");
 const IERC20 = require("./web3/ierc20-token");
 const Token = require("./token");
 const PrivateConfig = require("../PrivateConfig")
+const assert = require("assert");
 
 OneTask.baseInit = async function() {
   this.context = new Context()
+  // 构造bs对象
   this.context.binanceSpot = new BinanceSpot(PrivateConfig.binanceAPIKey, PrivateConfig.binanceSecretKey)
-
+  // 构造pairs
   const pairs = Object.values(PrivateConfig.tokenMapping).map(coin => `${coin}${Config.baseIerc20Token.symbol}` )
+  // 拉取binance exchange info
   const exchangeInfo = await BinanceSpot.exchangeInfo(pairs)
+  assert.notEqual(exchangeInfo.symbols, undefined, 'exchange info 获取失败,请重启试试。')
 
   // 解析priceTickFilter
-  const priceTickFilterMap = (() => {
-    const filterMap = {}
-
-    exchangeInfo.symbols.forEach(function(pairInfo) {
-      const filter = pairInfo.filters.filter(filterObj => filterObj.filterType === 'PRICE_FILTER')[0]
-
-      filterMap[pairInfo.symbol] = Math.log10(1 / parseFloat(filter.tickSize))
-    })
-
-    return filterMap
-  })()
+  const priceTickFilterMap = BinanceKit.parsePriceTickFilterMap(exchangeInfo.symbols)
   // 解析lotSizeFilter
-  const lotSizeFilterMap = (() => {
-    const filterMap = {}
-
-    exchangeInfo.symbols.forEach(function(pairInfo) {
-      const filter = pairInfo.filters.filter(filterObj => filterObj.filterType === 'LOT_SIZE')[0]
-
-      filterMap[pairInfo.symbol] = Math.log10(1 / parseFloat(filter.stepSize))
-    })
-
-    return filterMap
-  })()
-
+  const lotSizeFilterMap = BinanceKit.parseLotSizeFilterMap(exchangeInfo.symbols)
   // 初始化IERC20的token
   await IERC20.batchInit(this.context, Object.keys(PrivateConfig.tokenMapping))
-
   // 初始化本地token,绑定binance与IERC20
   await Token.batchInit(this.context, Object.keys(PrivateConfig.tokenMapping), priceTickFilterMap, lotSizeFilterMap)
 }

+ 5 - 20
libs/test/token-test.js

@@ -2,29 +2,14 @@ const logger = require('../../kit/logger-kit').getLogger('token-test')
 const IERC20 = require('../web3/ierc20-token')
 const Context = require('../context')
 const Config = require('../../config/config')
-const PrivateConfig = require('../../PrivateConfig')
 const Token = require('../token')
 const BinanceKit = require('../binance/binance-kit')
 const BinanceSpot = require('../binance/binance-spot')
 
-async function main() {
+describe('token-test', () => {
   const context = new Context()
 
-  // 获取priceTickFilter
-  const priceTickFilterMap = await (async () => {
-    const pairs = Object.values(PrivateConfig.tokenMapping).map(coin => `${coin}${Config.baseIerc20Token.symbol}` )
-    const exchangeInfo = await BinanceSpot.exchangeInfo(pairs)
-    return BinanceKit.parsepriceTickFilterMap(exchangeInfo.symbols)
-  })()
-  logger.info(priceTickFilterMap)
-
-  // 初始化IERC20的token
-  await IERC20.batchInit(context, Object.keys(PrivateConfig.tokenMapping))
-  logger.info(IERC20)
-
-  // 初始化本地token,绑定binance与IERC20
-  await Token.batchInit(context, Object.keys(PrivateConfig.tokenMapping), priceTickFilterMap)
-  logger.info(context)
-}
-
-main()
+  it('normal-test', () => {
+    logger.info('normal')
+  })
+})

+ 8 - 8
libs/web3/test/ierc20-test.js

@@ -1,13 +1,13 @@
-const logger = require('../../../kit/logger-kit')
+const logger = require('../../../kit/logger-kit').getLogger('ierc20-test')
 const IERC20 = require('../ierc20-token')
 const Context = require('../../context')
-const Config = require('../../../config/config')
+const PrivateConfig = require('../../../PrivateConfig')
 
-async function main() {
+describe('ierc20-test', () => {
   const context = new Context()
 
-  await IERC20.batchInit(context, Object.keys(Config.tokenMapping))
-  logger.info(IERC20)
-}
-
-main()
+  it('batch init test', async () => {
+    await IERC20.batchInit(context, Object.keys(PrivateConfig.tokenMapping))
+    logger.info(IERC20)
+  })
+})