✅ 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
parent
a6dfb47ec8
commit
ac89708e73
|
@ -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
|
|
@ -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
|
||||
)
|
||||
})
|
||||
))
|
||||
})
|
||||
)
|
||||
)
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue