Sinon异步调用单元测试

时间:2019-09-17 08:12:23

标签: javascript unit-testing sinon chai

我想测试一个加载一些数据的函数,并检查列表是否为空。

我得到一些errors,如下所示

  

网络获取错误

     

.map不是函数

     

存根被调用0次

我是javascript新手,将不胜感激。

loadmythings = async () => {
  const list = await getmythings();
  const finalvalues = []
  list.map(item => values.push({ value: item.name }))
  return value
}

api.js

export function getmythings(arg1, arg2) {
  url = "/someurl"
  returns fetch(url).then(response => response.json())
    .then(json => json)
    .catch(error => error)
}

我尝试过的代码是: 从../ api / .. api.js

导入*作为api1
describe('testing', () => {
  it('check list', async () => {
    const apptest = new loadmythings_1()
    const mockdata = [{ name: "my_name" }]
    const stub = sinon.stub(api1, 'getmythings').returns(mockdata);
    const finalList = await apptest.loadmythings();
    sinon.assert.calledOnce(stub);
    expect(finalList).to.equal(mockdata)
  });
});

1 个答案:

答案 0 :(得分:0)

这是单元测试解决方案:

loadmythings_1.ts

import * as api from './api';

export class loadmythings_1 {
  loadmythings = async () => {
    const list = await api.getmythings('arg1', 'arg2');
    const finalvalues: any[] = [];
    list.map((item) => finalvalues.push({ value: item.name }));
    return finalvalues;
  };
}

api.ts

export async function getmythings(arg1, arg2) {
  const url = '/someurl';
  return fetch(url)
    .then((response) => response.json())
    .then((json) => json)
    .catch((error) => error);
}

loadmythings_1.test.ts

import * as api from './api';
import { loadmythings_1 } from './loadmythings_1';
import sinon from 'sinon';
import { expect } from 'chai';

describe('testing', () => {
  it('check list', async () => {
    const apptest = new loadmythings_1();
    const mockdata = [{ name: 'my_name' }];
    const stub = sinon.stub(api, 'getmythings').resolves(mockdata);
    const finalList = await apptest.loadmythings();
    sinon.assert.calledOnce(stub);
    expect(finalList).to.deep.equal([{ value: 'my_name' }]);
  });
});

具有覆盖率报告的单元测试结果:

  testing
    ✓ check list


  1 passing (21ms)

-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   66.67 |      100 |      50 |   61.54 |                   
 api.ts            |   16.67 |      100 |       0 |   16.67 | 2-6               
 loadmythings_1.ts |     100 |      100 |     100 |     100 |                   
-------------------|---------|----------|---------|---------|-------------------