diff --git a/src/core/engine.spec.ts b/src/core/engine.spec.ts
index 8aaaddb4eb4ee647132b488219732c1fb794c412..fc954355b1182d4cc5bf088c8d8ecb4ec097bb92 100644
--- a/src/core/engine.spec.ts
+++ b/src/core/engine.spec.ts
@@ -94,7 +94,6 @@ describe("engine class", () => {
         new View({ metrics: [met3, met4, met7], dimensions: [dim4, dim5]}),
         new View({ metrics: [met6, met7], dimensions: [dim3, dim4, dim5, dim6]}),
         new View({ metrics: [met8, met2, met3], dimensions: [dim1, dim2, dim7]}),
-        new View({ metrics: [met1, met2, met3], dimensions: [dim1, dim2]}),
         new View({ metrics: [met2, met4], dimensions: [dim1, dim2]}),
         new View({ metrics: [met8], dimensions: [dim8, dim9, dim10]}),
         new View({ metrics: [met9], dimensions: [dim8, dim9, dim10]}),
@@ -148,18 +147,19 @@ describe("engine class", () => {
         expect(optimalView.metrics).to.be.an("array");
         expect(optimalView.dimensions).to.be.an("array");
         expect(optimalView.childViews).to.be.an("array");
-        expect(optimalView.metrics.length === 10);
-        expect(optimalView.dimensions.length === 10);
-        expect(optimalView.childViews.length === 4);
+        expect(optimalView.metrics).to.have.length(10);
+        expect(optimalView.dimensions).to.have.length(10);
+        expect(optimalView.childViews).to.have.length(4);
         let metAux: number[] = optimalView.metrics.sort().map((met: Metric) => {
             return Number(met.name.split(":")[1]);
         });
         let dimAux: number[] = optimalView.dimensions.sort().map((dim: Dimension) => {
             return Number(dim.name.split(":")[1]);
         });
-        for (let i: number = 1; i <= 10; ++i) {
-            expect(dimAux[i] === i);
-            expect(metAux[i] === i);
+
+        for (let i: number = 0; i < 10; ++i) {
+            expect(dimAux[i]).to.be.equal(i+1);
+            expect(metAux[i]).to.be.equal(i+1);
         }
     });
     it("should throw an exception, query with non-existent metric", () => {
@@ -201,11 +201,11 @@ describe("engine class", () => {
         expect(optimalView.metrics).to.be.an("array");
         expect(optimalView.dimensions).to.be.an("array");
         expect(optimalView.childViews).to.be.an("array");
-        expect(optimalView.metrics.length === 3);
-        expect(optimalView.dimensions.length === 2);
-        expect(optimalView.childViews.length === 0);
+        expect(optimalView.metrics).to.have.length(3);
+        expect(optimalView.dimensions).to.have.length(2);
+        expect(optimalView.childViews).to.have.length(0);
 
-        expect(optimalView.id === views[0].id);
+        expect(optimalView.id).to.be.equal(views[0].id);
     });
 
     it("should be create a fill that cover the query, using sub dimensions", () => {
@@ -222,12 +222,16 @@ describe("engine class", () => {
         expect(optimalView.metrics).to.be.an("array");
         expect(optimalView.dimensions).to.be.an("array");
         expect(optimalView.childViews).to.be.an("array");
-        expect(optimalView.metrics.length === 0);
-        expect(optimalView.dimensions.length === 2);
-        expect(optimalView.childViews.length === 1);
+        expect(optimalView.metrics).to.have.length(0);
+        expect(optimalView.dimensions).to.have.length(2);
+        expect(optimalView.childViews).to.have.length(1);
 
-        expect(optimalView.childViews[0].dimensions.some((item) => item.name === subdim1.name));
-        expect(optimalView.childViews[0].dimensions.some((item) => item.name === subdim2.name));
+        expect(optimalView).satisfy((optView: View) => {
+            return optView.childViews[0].dimensions.some((item) => item.name === subdim1.name);
+        });
+        expect(optimalView).satisfy((optView: View) => {
+            return optView.childViews[0].dimensions.some((item) => item.name === subdim1.name);
+        });
     });
 
     it("should be create a fill that cover the query, using the parents of sub dimensions", () => {
@@ -244,11 +248,16 @@ describe("engine class", () => {
         expect(optimalView.metrics).to.be.an("array");
         expect(optimalView.dimensions).to.be.an("array");
         expect(optimalView.childViews).to.be.an("array");
-        expect(optimalView.metrics.length === 0);
-        expect(optimalView.dimensions.length === 2);
-        expect(optimalView.childViews.length === 1);
+        expect(optimalView.metrics).to.have.length(0);
+        expect(optimalView.dimensions).to.have.length(2);
+        expect(optimalView.childViews).to.have.length(1);
 
-        expect(optimalView.id === views[0].id);
+        expect(optimalView).satisfy((optView: View) => {
+            return optView.childViews[0].dimensions.some((item) => item.name === subdim3.name);
+        });
+        expect(optimalView).satisfy((optView: View) => {
+            return optView.childViews[0].dimensions.some((item) => item.name === subdim5.name);
+        });
     });
 
     it("should throw an exception, sub-dimension with non-existent parent", () => {
@@ -261,6 +270,6 @@ describe("engine class", () => {
             expect(e.message).to.be.equal("Engine sub-dimention " + subdim4.name + " with no parent");
 
         }
-        expect(error);
+        expect(error).to.be.true;
     });
 });
diff --git a/src/core/engine.ts b/src/core/engine.ts
index e60ef539e4e1e7fa1b52a84cb8a96b9278666e30..af1640a899a5079314d9ccf793e411ee6a8be090 100644
--- a/src/core/engine.ts
+++ b/src/core/engine.ts
@@ -166,8 +166,10 @@ export class Engine {
         // If all the metrics and dimensions are the same and only exist one child view
         // return this single child view
         if (optimalViews.length === 1 &&
-            q.metrics.every((item) => optimalViews[0].view.metrics.indexOf(item) !== -1) &&
-            q.dimensions.every((item) => optimalViews[0].view.dimensions.indexOf(item) !== -1)) {
+            optimalViews[0].view.metrics.length === q.metrics.length &&
+            optimalViews[0].view.dimensions.length === q.dimensions.length &&
+            optimalViews[0].view.metrics.every((item) => q.metrics.indexOf(item) !== -1) &&
+            optimalViews[0].view.dimensions.every((item) => q.dimensions.indexOf(item) !== -1)) {
             return optimalViews[0].view;
         }
         else {