Как тестировать следующие методы в nodejs с использованием прототипа? - PullRequest
0 голосов
/ 26 февраля 2019
Client.prototype.a = function(x, y, z) {
    var results = [];
    var result1 = this.foo(x, y, z) ;
    results.push(result1);
    var result2 = this.bar(x, y, z) ;
    results.push(result2);
    return results;
}

Мне нужно выполнить юнит-тест:

  1. foo и bar были вызваны с x, y and z.
  2. . Массив результатов был заполнен result1 иresult2.

Я использую sinon, но я новичок в тестировании среды sinon.

1 Ответ

0 голосов
/ 26 февраля 2019

Я подозреваю, что ваша Client библиотека выглядит примерно так:

const Client = function() {};

Client.prototype.foo = () => {};
Client.prototype.bar = () => {};

, тогда вы можете легко протестировать, используя sinon заглушки & шпионы , иЯ использую chai's ожидают , так как он может приятно сравнить массивы / объекты:

const sinon = require('sinon');
const {expect} = require('chai');

const client = new Client();

// define simple function that just returns args
const returnArgs = (...args) => args;

// stub foo & bar to return args
sinon.stub(client, 'foo').callsFake(returnArgs);
sinon.stub(client, 'bar').callsFake(returnArgs);

it('should call foo & bar', () => {
  const args = [1,2,3];

  const actual = client.a(...args);

  expect(actual).eqls([args, args]);

  expect(client.foo.calledOnce).to.be.true;
  expect(client.foo.getCall(0).args).eqls(args);

  expect(client.bar.calledOnce).to.be.true;
  expect(client.bar.getCall(0).args).eqls(args);
})
...