diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 893848c6b8fe1ec7e2c1a9df780bf9095f5d9e24..d9772e73aaa6e36433fd0878f33df5dddce63233 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -19,6 +19,7 @@ run_tests:
     script:
         - mv config/ci_test.yaml.example config/test.yaml
         - npm test
+        - npm run lint
     tags:
         - node
         - postgres
diff --git a/src/adapter/postgres.ts b/src/adapter/postgres.ts
index b1156e8d6251ebdf501c2330f4aa466b5fe142fb..436b482eaa930966db202cff5e2c69ddae1e8fd9 100644
--- a/src/adapter/postgres.ts
+++ b/src/adapter/postgres.ts
@@ -646,7 +646,7 @@ export class PostgresAdapter extends Adapter {
 
         // Joins
         let conds: string[] = [];
-        for (let i in dimMap) {
+        for (let i of Object.keys(dimMap)) {
             let remainViews = dimMap[i].views.slice();
             let dim = dimMap[i].dim;
             let leftSide = this.buildColumn(dim, remainViews.shift().id);
diff --git a/src/core/engine.spec.ts b/src/core/engine.spec.ts
index df5d4950421810f8c6bd46147a3778f11c48cf5a..66c5c1b52ab7dd7914ad54601bad04d6ade24009 100644
--- a/src/core/engine.spec.ts
+++ b/src/core/engine.spec.ts
@@ -311,7 +311,7 @@ describe("engine class", () => {
             "==": FilterOperator.EQUAL,
             "!=": FilterOperator.NOTEQUAL
         };
-        for (let op in operators) {
+        for (let op of Object.keys(operators)) {
             const strFilter = "dim:0" + op + "0";
             const clause = engine.parseClause(strFilter);
             expect(clause).to.be.an("object");
@@ -328,7 +328,7 @@ describe("engine class", () => {
             expect(clause.filters[0].operator).to.be.equal(operators[op]);
         }
 
-        for (let op in operators) {
+        for (let op of Object.keys(operators)) {
             const strFilter = "dim:2" + op + "0";
             const clause = engine.parseClause(strFilter);
             expect(clause).to.be.an("object");
diff --git a/src/util/graph.ts b/src/util/graph.ts
index 2b020701c24e6e3f656ba02188c114080236657a..2a9e536d4a22ccda8734dede64167b39e0f9c4d7 100644
--- a/src/util/graph.ts
+++ b/src/util/graph.ts
@@ -339,7 +339,7 @@ export class Graph {
         let queue: Vertex[] = [root];
         while (queue.length > 0) {
             let v: Vertex = queue.shift();
-            for (let key in v.neighbors) {
+            for (let key of Object.keys(v.neighbors)) {
                 let u: Vertex = this.verticeMap[key];
                 if (this.canVisit(u, v.neighbors[key], clauses)) {
                     // Mark all vertices visited by the search
@@ -414,7 +414,7 @@ export class Graph {
 
         let views: View[] = [];
         // Pick all views that contain the root vertex
-        for (let i in root.neighbors) {
+        for (let i of Object.keys(root.neighbors)) {
             views = views.concat(root.neighbors[i].filter((item) => {
                 return item.isView &&
                        this.passConstraints(clauses, item.view.clauses);
diff --git a/test/postgres/fixture.ts b/test/postgres/fixture.ts
index 1f7b892d37bade3b7a3f012d93c2fab198088eb2..c966c551eda39c56bd1c5d6b8febb9857d878dfa 100644
--- a/test/postgres/fixture.ts
+++ b/test/postgres/fixture.ts
@@ -138,7 +138,7 @@ export class Fixture {
         for (let i = 0; i < rows.length; ++i) {
             let values = [];
             let keys = [];
-            for (let key in rows[i]) {
+            for (let key of Object.keys(rows[i])) {
                 keys.push("\"" + key + "\"");
                 values.push("'" + rows[i][key] + "'");
             }
diff --git a/tslint.json b/tslint.json
index 27a0066a639f25ed005d32ec7364e3e29bb8cb76..5d8557a4c479d163bc46ebc9655a640887f6ffe2 100644
--- a/tslint.json
+++ b/tslint.json
@@ -5,6 +5,8 @@
     "object-literal-sort-keys": false,
     "one-line": false,
     "trailing-comma": false,
-    "interface-name": false
+    "interface-name": false,
+    "max-line-length": false,
+    "member-ordering": false
   }
 }