Skip to content

Latest commit

 

History

History
102 lines (84 loc) · 4.31 KB

testing.md

File metadata and controls

102 lines (84 loc) · 4.31 KB

Тестирование

Testing

Шаблон webpack vue-cli предлагает вам готовые решения для модульного и e2e-тестирования.

Тестируя *.vue файлы, мы не можем использовать обычные тестовые движки для CommonJS, поскольку они не знают, как обрабатывать *.vue файлы. Вместо этого мы снова воспользуемся Webpack + vue-loader для сборки наших тестов. Мы рекомендуем использовать сочетание Karma и karma-webpack.

Karma – это тестовый движок, который запускает браузеры и прогоняет тесты за вас. Вы можете выбрать, в каких браузерах выполнять тесты и какой тестовый фреймворк использовать (например, Mocha или Jasmin). Вот пример конфигурации Karma для тестирования в PhantomJS с помощью фреймворка Jasmine:

npm install\
  karma karma-webpack\
  karma-jasmine jasmine-core\
  karma-phantomjs-launcher phantomjs-prebuilt\
  --save-dev
// мы можем воспользоваться тем же файлом конфигурации,
// однако, не забудьте удалить оригинальную точку входа,
// поскольку во время тестирования нам она не нужна
var webpackConfig = require('./webpack.config.js')
delete webpackConfig.entry

// karma.conf.js
module.exports = function (config) {
  config.set({
    browsers: ['PhantomJS'],
    frameworks: ['jasmine'],
    // это файл точки входа для всех наших тестов.
    files: ['test/index.js'],
    // передаем файл точки входа в webpack для сборки.
    preprocessors: {
      'test/index.js': ['webpack']
    },
    // используем конфигурацию webpack
    webpack: webpackConfig,
    // избегаем стены бесполезного текста
    webpackMiddleware: {
      noInfo: true
    },
    singleRun: true
  })
}

И для файла точки входа test/index.js:

// test/index.js
// подтягиваем все файлы тестов, используя специальную возможность Webpack
// https://webpack.github.io/docs/context.html#require-context
var testsContext = require.context('.', true, /\.spec$/)
testsContext.keys().forEach(testsContext)

Эта точка входа просто подтягивает все другие файлы, названия которых заканчиваются на .spec.js в ту же папку. Теперь мы наконец-то можем написать немного тестов:

// test/component-a.spec.js
var Vue = require('vue')
var ComponentA = require('../../src/components/a.vue')

describe('a.vue', function () {

  // проверяем свойства JavaScript-объекта
  it('should have correct message', function () {
    expect(ComponentA.data().msg).toBe('Привет от компонента A!')
  })

  // проверяем результаты рендеринга, вызывая рендер компонента
  it('should render correct message', function () {
    var vm = new Vue({
      template: '<div><test></test></div>',
      components: {
        'test': ComponentA
      }
    }).$mount()
    expect(vm.$el.querySelector('h2.red').textContent).toBe('Привет от компонента A!')
  })
})

Чтобы запустить тесты, добавьте следующий NPM скрипт:

// package.json
...
"scripts": {
  ...
  "test": "karma start karma.conf.js"
}
...

Наконец, запускаем:

npm test

Опять же, шаблон webpack vue-cli содержит готовый рабочий пример с тестами.