通过异步超时的 Jasmine 规范
Pass a Jasmine spec on async timeout
运行 茉莉花 2.8.
我有一个测试案例,其中失败案例是事件处理程序在不应该触发的情况下被触发。请注意,此处提供事件的代码库是专有的内部开发系统的一部分,因此这些不是 DOM 事件,我没有利用任何流行的 JS 框架:
it('should trigger the event handler in state 0', function (done) {
function specCb(ev) {
expect(ev).toBeDefined();
expect(ev.data).toBe('some value');
done();
}
thing.state = 0;
simulateEventTrigger(thing, specCb);
});
it('should not trigger the event handler in state 1', function (done) {
function specCb(ev) {
done.fail('this should not be called in state 1');
}
thing.state = 1;
simulateEventTrigger(thing, specCb);
});
第二个规范总是会失败,因为要么调用回调,这明确地使规范失败,要么规范在等待 done()
被调用时超时,因此失败。如果超时,我如何让 Jasmine 通过 规范?
在 Jasmine 中查看 spies。间谍允许您 "spy on" 一个函数并断言它是否已被调用以及使用哪些参数。或者,在您的情况下,它是否尚未被调用。示例可能如下所示...
describe("A spy", function() {
var evHandlers;
beforeEach(function() {
evHandlers = {
callback: function (e) {}
}
spyOn(evHandlers, 'callback');
});
it('should not trigger the event handler in state 1', function (done) {
thing.state = 1;
simulateEventTrigger(thing, evHandlers.callback);
expect(evHandlers.callback).not.toHaveBeenCalled();
});
});
实际上 it
函数接受回调,所以你可以这样做:
const TEST_TIMEOUT = 1000;
const CONSIDER_PASSED_AFTER = 500;
describe('a test that is being considered passing in case of a timeout', () => {
it('should succeed in after a specified time interval', done => {
setTimeout(() => {
done();
}, CONSIDER_PASSED_AFTER);
}, TEST_TIMEOUT);
});
运行 茉莉花 2.8.
我有一个测试案例,其中失败案例是事件处理程序在不应该触发的情况下被触发。请注意,此处提供事件的代码库是专有的内部开发系统的一部分,因此这些不是 DOM 事件,我没有利用任何流行的 JS 框架:
it('should trigger the event handler in state 0', function (done) {
function specCb(ev) {
expect(ev).toBeDefined();
expect(ev.data).toBe('some value');
done();
}
thing.state = 0;
simulateEventTrigger(thing, specCb);
});
it('should not trigger the event handler in state 1', function (done) {
function specCb(ev) {
done.fail('this should not be called in state 1');
}
thing.state = 1;
simulateEventTrigger(thing, specCb);
});
第二个规范总是会失败,因为要么调用回调,这明确地使规范失败,要么规范在等待 done()
被调用时超时,因此失败。如果超时,我如何让 Jasmine 通过 规范?
在 Jasmine 中查看 spies。间谍允许您 "spy on" 一个函数并断言它是否已被调用以及使用哪些参数。或者,在您的情况下,它是否尚未被调用。示例可能如下所示...
describe("A spy", function() {
var evHandlers;
beforeEach(function() {
evHandlers = {
callback: function (e) {}
}
spyOn(evHandlers, 'callback');
});
it('should not trigger the event handler in state 1', function (done) {
thing.state = 1;
simulateEventTrigger(thing, evHandlers.callback);
expect(evHandlers.callback).not.toHaveBeenCalled();
});
});
实际上 it
函数接受回调,所以你可以这样做:
const TEST_TIMEOUT = 1000;
const CONSIDER_PASSED_AFTER = 500;
describe('a test that is being considered passing in case of a timeout', () => {
it('should succeed in after a specified time interval', done => {
setTimeout(() => {
done();
}, CONSIDER_PASSED_AFTER);
}, TEST_TIMEOUT);
});