与摩卡等待未兑现的承诺
Wait for unheld promise with Mocha
我正在尝试使用 chai、chai-as-promised、sinon、sinon-chai 和 sinon-as-promised(使用 Bluebird)用 Mocha 测试 JavaScript 对象。
这里是被测对象:
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-promised。
我怎样才能通过这个测试?
您可以将 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;
});
}
}
然后您将使用异步 mocha 测试:
it("should load data upon activation", function (done) {
component.servicePromise.then(function() {
component.data.should.equal(5);
done();
});
});
我正在尝试使用 chai、chai-as-promised、sinon、sinon-chai 和 sinon-as-promised(使用 Bluebird)用 Mocha 测试 JavaScript 对象。
这里是被测对象:
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-promised。
我怎样才能通过这个测试?
您可以将 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;
});
}
}
然后您将使用异步 mocha 测试:
it("should load data upon activation", function (done) {
component.servicePromise.then(function() {
component.data.should.equal(5);
done();
});
});