2017-08-03 2 views
0

J'ai besoin de configurer le test de l'unité frontale pour mon projet PHP. J'ai décidé d'aller avec Jest.Comment configurer Jest pour un test d'unité normal avec un projet php?

Voici donc mon package.json.

{ 
    "name": "staging-deploy", 
    "version": "1.0.0", 
    "description": "Staging deploy", 
    "main": "GulpFile.js", 
    "author": "some one", 
    "license": "BSD-2-Clause", 
    "dependencies": { 
    "bower": "^1.8.0", 
    "gulp": "^3.9.1", 
    "gulp-autoprefixer": "^3.1.1", 
    "gulp-chmod": "^2.0.0", 
    "gulp-closure-compiler": "^0.4.0", 
    "gulp-concat": "^2.6.1", 
    "gulp-cssnano": "^2.1.2", 
    "gulp-duration": "0.0.0", 
    "gulp-jasmine": "^2.4.2", 
    "gulp-less": "^3.3.2", 
    "gulp-load-plugins": "^1.4.0", 
    "gulp-pixrem": "^1.0.0", 
    "gulp-postcss": "^6.3.0", 
    "gulp-replace": "^0.5.4", 
    "gulp-sourcemaps": "^1.11.0", 
    "gulp-update": "0.0.2", 
    "gulp-update-modul": "^1.5.5", 
    "gulp-watch-less": "^1.0.1", 
    "run-sequence": "^2.0.0" 
    }, 
    "devDependencies": { 
    "jest": "^20.0.4" 
    }, 
    "scripts": { 
    "test": "jest" 
    } 
} 

Puis j'ai fait __tests__ dossier et de faire ma première fonction de test comme celui-ci.

// homepage.test.js

require('../modules/homepage.js'); 

test('adds 1 + 2 to equal 3', function() { 
    expect(Homepage.sum.sumNumber(1, 2)).toBe(3); 
}); 

Et ceci est mon homepage.js

// homepage.js

var Homepage = {}; 

(function() { 
    "use strict"; 

    Homepage.sum = { 
     sumNumber: function(num1, num2) { 
      return num1 + num2 
     } 
    }; 
})(); 

Je couru npm run test C'est ce que je got:

FAIL __tests__/homepage.test.js 
    ● adds 1 + 2 to equal 3 

    ReferenceError: Homepage is not defined 

     at Object.<anonymous> (__tests__/homepage.test.js:4:12) 
     at Promise.resolve.then.el (node_modules/p-map/index.js:42:16) 
     at process._tickCallback (internal/process/next_tick.js:109:7) 

    ✕ adds 1 + 2 to equal 3 (2ms) 

Test Suites: 1 failed, 1 total 
Tests:  1 failed, 1 total 
Snapshots: 0 total 
Time:  3.138s, estimated 11s 

On dirait que mon fichier de test ne peut pas accéder à la fonction dans mon fichier Homepage.js.

Comment puis-je résoudre ce problème et le faire fonctionner?

Merci

Répondre

0

chargeur de modules Common ne fonctionne pas de cette façon. Si vous voulez exporter n'importe quoi d'un module, vous devez l'attacher à l'objet module.exports ou simplement l'écraser. cet objet est la seule chose qui va exporter à partir d'un module. si:

// homepage.js

"use strict"; 
var Homepage = {}; 

Homepage.sum = { 
     sumNumber: function(num1, num2) { 
      return num1 + num2 
     } 
    }; 

module.exports = Homepage; 

Remarque que vous n'avez pas besoin d'utiliser un comme tous js Ia vie des fichiers se comportent modulaire et ont leur propre champ.

Et puis dans votre fichier homepage.test.js:

// homepage.test.js

var Homepage = require('../modules/homepage.js'); 

test('adds 1 + 2 to equal 3', function() { 
    expect(Homepage.sum.sumNumber(1, 2)).toBe(3); 
}); 
+0

est-il de toute façon de le faire sans utiliser js commun, car l'application est en cours d'exécution tout sans 'module.exports' donc ne pas ajouter c'est une bonne idée. –

+0

@ varis.dara, vous pouvez préparer le code js modulaire commun pour les navigateurs en utilisant [browserify] (http://browserify.org/) ou en utilisant un système de chargement de module AMD comme [requirejs] (http: // requirejs. org /) ou utilisez le modèle de module ES6 qui est assez récent et uniquement pris en charge par les navigateurs les plus récents. Vous devriez donc utiliser un transteteur comme [babel] (https://babeljs.io/) pour le convertir en js commun puis le filtrer. Tous ces éléments pourraient facilement être configurés dans une tâche de gulp à faire automatiquement. – dNitro