西农类构造函数

问题描述 投票:0回答:1

我有一个动物班,如下

动物.js

export default class Animal {
  constructor(type) {
    this.type = type
  }
  getAnimalSound(animal) {
    if (animal && animal.type == 'dog') return 'woof'
    if (animal && animal.type == 'cat') return 'meow'
  }
}

我做了一个动物园模块,它有一个getAnimalSound()的方法,如下所示。

zoo.js

import Animal from './Animal'

export default function getAnimalSound(type) {
  let animal = new Animal(type)
  let animalSound = animal.getAnimalSound(animal)
  return animalSound
}

现在我如何对zoo模块进行单元测试?

zoo.test.js

import sinon from 'sinon'

import Animal from './Animal'
import getAnimalSound from './zoo'

let animalStub = sinon.createStubInstance(Animal)
let a = animalStub.getAnimalSound.returns('woof')
let sound = getAnimalSound('cat')
console.log(sound)

所以问题是 "new "没有任何效果,我在test.js中插播的方式可以实现吗?

RegardsBobu P

node.js unit-testing sinon
1个回答
0
投票

你可以使用 连接缝 嘲笑你 ./animal.js 模块和 Animal 类。

例如

animal.ts:

export default class Animal {
  type: any;
  constructor(type) {
    this.type = type;
  }
  getAnimalSound(animal) {
    if (animal && animal.type == 'dog') return 'woof';
    if (animal && animal.type == 'cat') return 'meow';
  }
}

zoo.ts:

import Animal from './animal';

export default function getAnimalSound(type) {
  let animal = new Animal(type);
  let animalSound = animal.getAnimalSound(animal);
  return animalSound;
}

zoo.test.ts:

import sinon from 'sinon';
import proxyquire from 'proxyquire';
import { expect } from 'chai';

describe('61716637', () => {
  it('should pass', () => {
    const animalInstanceStub = {
      getAnimalSound: sinon.stub().returns('stubbed value'),
    };
    const AnimalStub = sinon.stub().returns(animalInstanceStub);
    const getAnimalSound = proxyquire('./zoo', {
      './animal': { default: AnimalStub },
    }).default;
    const actual = getAnimalSound('bird');
    expect(actual).to.be.equal('stubbed value');
    sinon.assert.calledWith(AnimalStub, 'bird');
    sinon.assert.calledWith(animalInstanceStub.getAnimalSound, animalInstanceStub);
  });
});

单元测试结果与覆盖率报告。

  61716637
    ✓ should pass (2242ms)


  1 passing (2s)

-----------|---------|----------|---------|---------|-------------------
File       | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-----------|---------|----------|---------|---------|-------------------
All files  |   54.55 |        0 |   33.33 |   66.67 |                   
 animal.ts |   16.67 |        0 |       0 |      25 | 4-8               
 zoo.ts    |     100 |      100 |     100 |     100 |                   
-----------|---------|----------|---------|---------|-------------------
© www.soinside.com 2019 - 2024. All rights reserved.