Define lazily evaluated test data via def()
and subject()
functions.
describe('old spec', function () {
// order is important, options must be defined before subject
beforeEach(function () {
this.options = { foo: 'foo' };
});
beforeEach(function () {
this.subject = new SomeObject(this.options)
});
it('works', function () {
expect(this.options).toBeDefined();
expect(this.subject).toBeDefined();
});
});
describe('new shiny spec', function () {
// order is not important, defined properties are lazy evaluated
subject(function () {
return new SomeObject(this.options)
});
def('options', function () {
return { foo: 'foo' }
});
it('works', function () {
expect(this.options).toBeDefined();
expect(this.subject).toBeDefined();
});
});