Rav*_*vit 7 asynchronous jasmine
我试图用一个简单的promise实现(异步代码)和done()函数实现jasmine测试,虽然被测试的代码运行得很好,但我的测试失败了.谁能帮助我弄清楚我的测试中缺少什么?
var Test = (function () {
function Test(fn) {
this.tool = null;
fn(this.resolve.bind(this));
}
Test.prototype.then = function (cb) {
this.callback = cb;
};
Test.prototype.resolve = function (value) {
var me = this;
setTimeout(function () {
me.callback(value);
}, 5000);
};
return Test;
})();
describe("setTimeout", function () {
var test, newValue = false,
originalTimeout;
beforeEach(function (done) {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
test = new Test(function (cb) {
setTimeout(function () {
cb();
}, 5000);
});
test.then(function () {
newValue = true;
console.log(1, newValue);
done();
});
});
it("Should be true", function (done) {
expect(1).toBe(1);
expect(newValue).toBeTruthy();
});
afterEach(function () {
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
});
});
Run Code Online (Sandbox Code Playgroud)
jsfiddle中的相同测试:http://jsfiddle.net/ravitb/zsachqpg/
此代码正在测试一个像对象这样的简单承诺,因此Test为方便起见,将对象称为promise.
在创建promise之后有两个不同的异步事件:1.对.then()方法的调用2.通过调用cb()函数中的beforeEach()函数来解析promise .
在现实世界中,这两个可以在任何时间以任何顺序被调用.
对于测试,.then()必须将调用移动到it()节的回调中,并且expect()需要在其回调中调用所有规范方法(例如),否则它们将在解析之前运行.这beforeEach()是测试设置的一部分,而it()功能是规范,测试本身.
该done()方法需要调用两次,
当beforeEach()异步操作完成时(即在cb()调用之后),将开始运行规范.所以看起来应该是这样的:
beforeEach(function (done) {
test = new Test(function (cb) {
setTimeout(function () {
console.log("in beforeEach() | setTimeout()");
cb(resolvedValue);
done()
}, 500);
});
});
Run Code Online (Sandbox Code Playgroud)在调用jasmine测试方法之后,it()在.then()方法内部完成规范(部分)的异步操作时,这将告诉Jasmine规范已完成运行(因此不会达到超时).所以:
it("Should be " + resolvedValue, function (done) {
test.then(function (value) {
console.log("in then()");
expect(value).toBe(resolvedValue);
done();
});
});
Run Code Online (Sandbox Code Playgroud)另外,正如您所看到的那样,而不是测试变量的值是否已更改,我正在测试传递给.then()方法的值与传递给promise resolve cb()函数的值相同,因为这是您期望的正确行为.
这是你的小提琴的更新版本.
您可以在浏览器的控制台中查看是否正在调用所有回调
注意:更改Jasmine的DEFAULT_TIMEOUT_INTERVAL只会让它更加复杂,所以我删除了它和一些无关的代码.
| 归档时间: |
|
| 查看次数: |
12492 次 |
| 最近记录: |