【问题标题】:Sinon unit testing for asynchronous call异步调用的Sinon单元测试
【发布时间】:2019-09-17 08:12:23
【问题描述】:

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

我得到了一些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 导入 * as 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)
  });
});

【问题讨论】:

  • 你能不能把returns改成return,这样就变成return fetch(url).then(response => response.json())了?
  • 感谢您的建议,但没有帮助

标签: javascript unit-testing sinon chai


【解决方案1】:

这里是单元测试解决方案:

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 |                   
-------------------|---------|----------|---------|---------|-------------------

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-13
    • 2012-04-28
    • 2013-03-14
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多