Sinon Stub зависимый класс в модуле node.js - PullRequest
0 голосов
/ 29 мая 2020

У меня есть один класс, как показано ниже


nx-user.js
class NXUser {
constructor() {}

view(guid, data) {
  //do something
}

}

Затем у меня есть модуль пользовательского контроллера, как показано ниже, который имеет зависимость от класса NxUser

userController. js

const userDb = new NXUser();
import NXUser from "../../../persistence/nx-user";
const allUsers = () => {
    return userDb.view()
}

export {allUsers}

Ниже приведен код, написанный для функции просмотра-заглушки класса NxUser для модульных тестов контроллера. Но это не работает. Он всегда вызывает фактический установленный или заглушенный

userController-test. js

let userdb=NXUser();
describe("user controller", function () {
 let stubValue = [{
  "name": "Urvashi Parmar",
  "email": "urvashi.parmar@nationalexpress.com"]}

  it("Should create user", () => {           
            sinon.stub(userdb, 'create').resolves(stubValue);            
            userController.allUsers ().then((body) => {
                expect(body[0].name).to.equal(stubValue .name);
                done();
            });
        })  
}

1 Ответ

0 голосов
/ 30 мая 2020

Поскольку я еще не могу комментировать, поэтому мне нужно дать полный ответ.

Путаница: в вашем userController-test. js, вы пытаетесь протестировать NXUser.create, а в файле nx- user. js не имеет определения create.

Предположим: вы пытаетесь протестировать NXUser.view.

Этот пример создан на основе вашего кода и работает нормально. Консольный журнал «Вызываемый» не вызывается.

Выделение:

  1. Заглушка NXUser, просматриваемая напрямую, а не userdb.create;
  2. Я использую asyn c -wait внутри теста.
const sinon = require('sinon');
const { expect } = require('chai');

class NXUser {
  constructor() {}
  view(guid, data) {
    console.log('Called');
    return new Promise((resolve) => resolve([]));
  }
  // Add this only for dummy.
  create() {
    return new Promise((resolve) => resolve([]));
  }
}

const userController = {
  allUsers() {
    const userDb = new NXUser();
    return userDb.view();
  }
}

describe('user controller', function () {
  // Suppose you test view user.
  it('should view user', async function () {
    const stubValue = [{
      name: 'Urvashi Parmar',
      email: 'urvashi.parmar@nationalexpress.com'
    }];
    // Suppose you stub method view and not create.
    const stubUserDBView = sinon.stub(NXUser.prototype, 'view');
    stubUserDBView.resolves(stubValue);

    const body = await userController.allUsers();
    expect(body).to.be.an('array').that.have.lengthOf(1);
    expect(body[0]).to.have.property('name', stubValue[0].name);

    // Restore stub.
    stubUserDBView.restore();
  });
});
$ npx mocha stackoverflow.js


  user controller
    ✓ should view user


  1 passing (11ms)

$

Надеюсь, это поможет.

...