feat: add DataSource.deleteAllModels() API
When writing tests, for performance reasons we often want to reuse the same data-source instance for many tests suites. At the same time, we want to keep such test suites independent and allow them to reuse the same model name for different model classes. Juggler does support redefinition of a model with the same name. This change is adding a new API called that allows tests to remove all old models before creating new ones. This API would be typically called from a `before` hook. Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
This commit is contained in:
parent
6aea50ad27
commit
78c5b12740
|
@ -844,6 +844,16 @@ DataSource.prototype.deleteModelByName = function(modelName) {
|
|||
delete this.connector._models[modelName];
|
||||
};
|
||||
|
||||
/**
|
||||
* Remove all models from the registry, but keep the connector instance
|
||||
* (including the pool of database connections).
|
||||
*/
|
||||
DataSource.prototype.deleteAllModels = function() {
|
||||
for (const m in this.modelBuilder.models) {
|
||||
this.deleteModelByName(m);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Mixin DataAccessObject methods.
|
||||
*
|
||||
|
|
|
@ -517,6 +517,34 @@ describe('DataSource', function() {
|
|||
});
|
||||
}
|
||||
});
|
||||
|
||||
describe('deleteAllModels', () => {
|
||||
it('removes all model definitions', () => {
|
||||
const ds = new DataSource({connector: 'memory'});
|
||||
ds.define('Category');
|
||||
ds.define('Product');
|
||||
|
||||
Object.keys(ds.modelBuilder.definitions)
|
||||
.should.deepEqual(['Category', 'Product']);
|
||||
Object.keys(ds.modelBuilder.models)
|
||||
.should.deepEqual(['Category', 'Product']);
|
||||
Object.keys(ds.connector._models)
|
||||
.should.deepEqual(['Category', 'Product']);
|
||||
|
||||
ds.deleteAllModels();
|
||||
|
||||
Object.keys(ds.modelBuilder.definitions).should.be.empty();
|
||||
Object.keys(ds.modelBuilder.models).should.be.empty();
|
||||
Object.keys(ds.connector._models).should.be.empty();
|
||||
});
|
||||
|
||||
it('preserves the connector instance', () => {
|
||||
const ds = new DataSource({connector: 'memory'});
|
||||
const connector = ds.connector;
|
||||
ds.deleteAllModels();
|
||||
ds.connector.should.equal(connector);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function givenMockConnector(props) {
|
||||
|
|
|
@ -110,6 +110,19 @@ export declare class DataSource extends EventEmitter {
|
|||
|
||||
getModel(modelName: string): ModelBaseClass | undefined;
|
||||
|
||||
/**
|
||||
* Remove a model from the registry.
|
||||
*
|
||||
* @param modelName
|
||||
*/
|
||||
deleteModelByName(modelName: string): void;
|
||||
|
||||
/**
|
||||
* Remove all models from the registry, but keep the connector instance
|
||||
* (including the pool of database connections).
|
||||
*/
|
||||
deleteAllModels(): void;
|
||||
|
||||
/**
|
||||
* Attach an existing model to a data source.
|
||||
* This will mixin all of the data access object functions (DAO) into your
|
||||
|
|
Loading…
Reference in New Issue