reinitialize lootalot_front to add unit testing

This commit is contained in:
2019-10-10 10:14:02 +02:00
parent 70eed30bee
commit 77728cfdc4
9 changed files with 157 additions and 56 deletions

View File

@@ -0,0 +1,2 @@
> 1%
last 2 versions

View File

@@ -0,0 +1,27 @@
module.exports = {
root: true,
env: {
node: true
},
'extends': [
'plugin:vue/essential',
'eslint:recommended'
],
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
},
parserOptions: {
parser: 'babel-eslint'
},
overrides: [
{
files: [
'**/__tests__/*.{j,t}s?(x)'
],
env: {
mocha: true
}
}
]
}

View File

@@ -1,10 +1,5 @@
module.exports = { module.exports = {
presets: [ presets: [
'@vue/app' '@vue/app'
], ]
"env": {
"test": {
"presets": [["env", { "targets": { "node": "current" } }]]
}
}
} }

View File

@@ -3,12 +3,10 @@
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"scripts": { "scripts": {
"css-build": "node-sass --omit-source-map-url sass/scroll.scss public/css/scroll.css",
"css-watch": "npm run css-build -- --watch",
"serve": "vue-cli-service serve", "serve": "vue-cli-service serve",
"build": "vue-cli-service build", "build": "vue-cli-service build",
"lint": "vue-cli-service lint", "lint": "vue-cli-service lint",
"test": "jest" "test:unit": "vue-cli-service test:unit"
}, },
"main": "sass/scroll.scss", "main": "sass/scroll.scss",
"dependencies": { "dependencies": {
@@ -17,56 +15,15 @@
"vue": "^2.6.10" "vue": "^2.6.10"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "^3.8.0", "@vue/cli-plugin-babel": "^3.11.0",
"@vue/cli-plugin-eslint": "^3.8.0", "@vue/cli-plugin-eslint": "^3.11.0",
"@vue/cli-service": "^3.8.0", "@vue/cli-plugin-unit-mocha": "^3.11.0",
"@vue/test-utils": "^1.0.0-beta.29", "@vue/cli-service": "^3.11.0",
"babel-core": "^6.26.3", "@vue/test-utils": "1.0.0-beta.29",
"babel-eslint": "^10.0.1", "babel-eslint": "^10.0.1",
"babel-jest": "^24.8.0", "chai": "^4.1.2",
"babel-preset-env": "^1.7.0",
"eslint": "^5.16.0", "eslint": "^5.16.0",
"eslint-plugin-vue": "^5.0.0", "eslint-plugin-vue": "^5.0.0",
"jest": "^24.8.0",
"node-sass": "^4.12.0",
"vue-jest": "^3.0.4",
"vue-template-compiler": "^2.6.10" "vue-template-compiler": "^2.6.10"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"rules": {},
"parserOptions": {
"parser": "babel-eslint"
}
},
"postcss": {
"plugins": {
"autoprefixer": {}
}
},
"browserslist": [
"> 1%",
"last 2 versions"
],
"jest": {
"moduleFileExtensions": [
"js",
"json",
"vue"
],
"transform": {
"^.*\\.(vue)$": "vue-jest",
"^.+\\.js$": "babel-jest"
},
"moduleNameMapper": {
"^@/(.*)$": "<rootDir>/src/$1"
}
} }
} }

View File

@@ -0,0 +1,5 @@
module.exports = {
plugins: {
autoprefixer: {}
}
}

View File

@@ -7,6 +7,7 @@
<div class="field"> <div class="field">
<div class="control is-expanded"> <div class="control is-expanded">
<input type="text" <input type="text"
name="name"
placeholder="Nom de l'objet" placeholder="Nom de l'objet"
v-model="item.name" v-model="item.name"
@input="autoCompletion" @input="autoCompletion"
@@ -30,6 +31,7 @@
<p class="control"><a class="button is-static">PO</a></p> <p class="control"><a class="button is-static">PO</a></p>
<p class="control"> <p class="control">
<input type="text" <input type="text"
name="base_price"
placeholder="Prix" placeholder="Prix"
class="input" class="input"
:class="{'is-danger': item.base_price == ''}" :class="{'is-danger': item.base_price == ''}"

View File

@@ -0,0 +1,5 @@
module.exports = {
env: {
mocha: true
}
}

View File

@@ -0,0 +1,94 @@
import { expect } from 'chai'
import { mount } from '@vue/test-utils'
import ItemInput from '@/components/ItemInput.vue'
const MOCK_SOURCE = [
{ id: 1, name: "Épée", base_price: 20 },
{ id: 2, name: "Arc", base_price: 30 },
]
const withItemFactory = function (item) {
const wrapper = mount(ItemInput, {
propsData: {
source: MOCK_SOURCE,
}
})
wrapper.setData({ item })
return wrapper
}
describe('ItemInput.vue', () => {
// Tests on validation of the item data
it('item with name and price is valid', () => {
const localItem = {
item: {
id: 0,
name: 'Epee',
base_price: 200
}
}
expect(ItemInput.computed.isItemValid.call(localItem)).to.equal(true)
})
it('item without data is not valid', () => {
const localItem = {
item: {
id: 0,
name: '',
base_price: ''
}
}
expect(ItemInput.computed.isItemValid.call(localItem)).to.equal(false)
})
it('item without price is not valid', () => {
const localItem = {
item: {
id: 0,
name: 'Epee',
base_price: ''
}
}
expect(ItemInput.computed.isItemValid.call(localItem)).to.equal(false)
})
it('item without name is not valid', () => {
const localItem = {
item: {
id: 0,
name: '',
base_price: 200
}
}
expect(ItemInput.computed.isItemValid.call(localItem)).to.equal(false)
})
it('item price must be a number', () => {
const localItem = {
item: {
id: 0,
name: 'Epee',
base_price: 'cheap'
}
}
expect(ItemInput.computed.isItemValid.call(localItem)).to.equal(false)
})
// Test on auto-completion
it('show completion suggestions on input', () => {
const wrapper = withItemFactory({ id: 0, name: '', base_price: '' })
const input = wrapper.find({ name: "name" })
const suggestionBox = wrapper.find('.dropdown')
console.log(input)
expect(suggestionBox.classes('is-active')).to.equal(true)
})
it('hides suggestion box when no suggestions are available', () => {
})
it('click on suggestion sets the item', () => {
})
})

View File

@@ -0,0 +1,14 @@
import { expect } from 'chai'
import { shallowMount } from '@vue/test-utils'
import Wealth from '@/components/Wealth.vue'
describe('Wealth.vue', () => {
it('renders wealth when passed', () => {
const wealth = [1, 2, 3, 4]
const wrapper = shallowMount(Wealth, {
propsData: { wealth }
})
var divs = wrapper.findAll('div')
expect(wrapper.text()).to.include(wealth)
})
})