Жди неслыханного обещания с мокко

Я пытаюсь протестировать объект JavaScript с Mocha, используя chai, chai-as-обещано, sinon, sinon-chai и sinon-as-обещано (с Bluebird).

Вот тестируемый объект:

function Component(MyService) {
  var model = this;
  model.data = 1;

  activate();

  function activate() {
    MyService.get(0).then(function (result) {
      model.data = result;
    });
  }
}

и вот тест:

describe("The object under test", function () {
  var MyService, component;

  beforeEach(function () {
    MyService = {
      get: sinon.stub()
    };
    MyService.get
      .withArgs(0)
      .resolves(5);
    var Component = require("path/to/component");
    component = new Component(MyService);
  });

  it("should load data upon activation", function () {
    component.data.should.equal(5); // But equals 1
  });
});

Моя проблема заключается в том, что я не могу удержать обещание, используемое в компоненте, чтобы дождаться его, прежде чем проверять способы, описанные в документах Mocha, sinon-as-обещано.

Как я могу пройти этот тест?

1 ответ

Решение

Вы можете хранить обещание от MyService.get как свойство компонента:

function Component(MyService) {
  var model = this;
  model.data = 1;

  activate();

  function activate() {
    model.servicePromise = MyService.get(0);

    return model.servicePromise.then(function (result) {
      model.data = result;
    });
  }
}

Тогда вы бы использовали асинхронный тест мокко:

it("should load data upon activation", function (done) {
  component.servicePromise.then(function() {
       component.data.should.equal(5);
       done();
  });
});
Другие вопросы по тегам