Ajout d'une batterie de tests du méca somme

Ansi que du fichier qui va lancer avec mocha tous les tests similaires.
On note que le dernier test de l'aiguillage numérique ne fonctionne pas
: il semblerait que le mécanisme ait un bug d'implémenation.
pull/37/head
mama 2017-08-14 15:30:33 +02:00
parent a6dfb47ec8
commit ac89708e73
5 changed files with 88 additions and 3 deletions

View File

@ -0,0 +1,23 @@
import R from 'ramda'
// This array can't be generated, as the arguments to require.context must be literals :-|
let directoryLoaders =
[
]
// require.context returns an object which
// a) is a function behaving like 'requires', taking a filename and returning a module and
// b) has additional properties, some function-valued; keys() returns the files matched
// A "module" is simply the contents of a file according to a Webpack loader; this can be JS, JSON, etc.
// Thus, this weird loadAll returns an array, each item of which is the contents of each file in a directory
let loadAll = directoryLoaderFunction =>
directoryLoaderFunction.keys().map(directoryLoaderFunction)
let directoryLoaderFunction =
require.context('./mécanismes', true, /.yaml$/)
let items =
loadAll(directoryLoaderFunction)
export default items

33
test/mecanisms.test.js Normal file
View File

@ -0,0 +1,33 @@
/*
Les mécanismes sont testés dans mécanismes/ comme le sont les variables directement dans la base YAML.
On y créée dans chaque fichier une base YAML autonome, dans laquelle intervient le mécanisme à tester,
puis on teste idéalement tous ses comportements sans en faire intervenir d'autres.
*/
import {expect} from 'chai'
import {enrichRule} from '../source/engine/rules'
import {analyseSituation} from '../source/engine/traverse'
import testBatteries from './load-mecanism-tests'
describe('mécanismes', () =>
testBatteries.map( battery =>
describe('mecanisme' + Math.random(), function() {
battery.map(({exemples, nom}) =>
exemples && exemples.map(({nom: testTexte, situation, 'valeur attendue': valeur}) =>
it(testTexte + '', () => {
let rules = battery.map(enrichRule),
state = situation || {},
analysis = analyseSituation(rules, nom)(name => state[name])
// console.log('JSON.stringify(analysis', JSON.stringify(analysis))
expect(analysis)
.to.have.property(
'nodeValue',
valeur
)
})
))
})
)
)

View File

@ -8,7 +8,7 @@
- nom: taulard cyclothymique
- nom: nombre de gigolos rachitiques
format: nombre
- nom: aiguillage numérique simple
@ -28,7 +28,7 @@
taulard cyclothymique: non
nombre de gigolos rachitiques: 1801
valeur attendue: 0.015
- nom: aucun aiguillage n'est activé -> 0
- nom: aucun aiguillage n'est activé
situation:
taulard cyclothymique: non
nombre de gigolos rachitiques: 1789

View File

@ -0,0 +1,30 @@
- nom: farine
format: kg
- nom: sucre
format: kg
- nom: poids total
formule:
somme:
- farine
- sucre
exemples:
- nom: somme simple
situation:
farine: 29000
sucre: 200
valeur attendue: 29200
- nom: un nul dans la somme
situation:
sucre: 200
valeur attendue: null
- nom: une somme de nuls
situation: # pas de situation
valeur attendue: null
- nom: un entier + un flotant
situation:
farine: 2.1
sucre: 200
valeur attendue: 202.1

View File

@ -1,6 +1,5 @@
import {expect} from 'chai'
import {enrichRule} from '../source/engine/rules'
import {treatRuleRoot} from '../source/engine/traverse'
import {analyseSituation} from '../source/engine/traverse'
let stateSelector = (state, name) => null