Жди неслыханного обещания с мокко
Я пытаюсь протестировать объект 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();
});
});