Tôi có nhiều ứng dụng vanilla Laravel + Vue.js hơn và tôi đang cố gắng thực hiện một số JS testing with Karma and Jasmine. Nếu tôi cố gắng sử dụng () => {}
chức năng hoặc từ khóa kiểu như const
trong các thử nghiệm của mình, chúng không thành công với Lỗi không mong muốn lỗi, tuy nhiên, tôi không gặp sự cố khi sử dụng từ khóa import
và tôi có thể transpile và làm việc với .vue
tệp không có vấn đề .Cú phápError: Mã thông báo không mong muốn 'const' (với Vue, Karma, Webpack, PhantomJS)
Một sự khẳng định tầm thường như
expect(true).toBe(true);
vẻ để làm việc tốt (xem dòng cuối cùng)
$ ./node_modules/karma/bin/karma start
22 11 2016 11:09:23.250:INFO [karma]: Karma v1.3.0 server started at http://localhost:9876/
22 11 2016 11:09:23.254:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
22 11 2016 11:09:23.263:INFO [launcher]: Starting browser PhantomJS
22 11 2016 11:09:24.025:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#U1dCZ7i3UtsC-M3_AAAA with id 84458811
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 SUCCESS (0.004 secs/0.002 secs)
Sau đó, nếu tôi thêm một const
khai tầm thường với chức năng thử nghiệm của tôi
const myVar = 1
expect(true).toBe(true);
Tôi gặp lỗi:
$ ./node_modules/karma/bin/karma start
22 11 2016 11:10:00.741:INFO [karma]: Karma v1.3.0 server started at http://localhost:9876/
22 11 2016 11:10:00.745:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
22 11 2016 11:10:00.752:INFO [launcher]: Starting browser PhantomJS
22 11 2016 11:10:01.659:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#Gwh8ywcLStrKf-ljAAAA with id 78654911
PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
SyntaxError: Unexpected token 'const'
at tests/unit/Example.spec.js:165
Thay vào đó, nếu tôi cố gắng gây ra một lỗi cú pháp
const = 1 // syntax error
expect(true).toBe(true);
sau đó Babel phàn nàn (trên dòng đầu tiên, trước khi Karma hoặc PhantomJS khởi động lên)
22 11 2016 11:07:00.079:ERROR [preprocessor.babel]: /Users/crcarter/Software/CropPlanning/cps-php/resources/assets/js/tests/unit/Example.spec.js: Unexpected token (8:15)
at /Users/crcarter/Software/CropPlanning/cps-php/resources/assets/js/tests/unit/Example.spec.js
22 11 2016 11:07:00.090:INFO [karma]: Karma v1.3.0 server started at http://localhost:9876/
22 11 2016 11:07:00.091:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
22 11 2016 11:07:00.101:INFO [launcher]: Starting browser PhantomJS
22 11 2016 11:07:00.986:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#9Y6QLVxtJ57qRrgDAAAA with id 56249014
PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
You need to include some adapter that implements __karma__.start method!
này dường như ngụ ý rằng tệp Example.spec.js
đang được phân tích cú pháp/được transpiled bởi Babel, nhưng phiên bản chuyển đổi không được gửi đến trình duyệt đúng cách, mặc dù tệp Example.vue
dường như được gửi đúng cách.
Tôi có thể làm gì để có thể nhận những thứ như const
và () => {}
để làm việc trong các thử nghiệm của mình? Cảm ơn bạn.
Dưới đây là các tập tin liên quan:
resources/assets/js/components/Example.vue
resources/assets/js/tests/unit/Example.spec.js
karma.conf.js
package.json
// Example.vue
<template>
<div class="container">
</div>
</template>
<script>
export default {
mounted() {
console.log('Component ready.')
},
data() {
return { input: '# Hello!' }
}
}
</script>
// Example.spec.js
import Example from '../../components/Example.vue';
describe('Example', function() {
it('should set correct default data', function() {
const myVar = 1
// trivial assertions
expect(true).toBe(true);
});
});
// karma.conf.js
var path = require('path')
var basePath = './resources/assets/js/';
module.exports = function(config) {
config.set({
frameworks: ['jasmine'],
port: 9876,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['PhantomJS'],
singleRun: true,
basePath: basePath,
webpack: {
resolve: {
extensions: ['', '.js', '.vue'],
fallback: [path.join(__dirname, 'node_modules')],
},
resolveLoader: {
fallback: [path.join(__dirname, 'node_modules')]
},
module: {
loaders: [
{ test: /\.vue$/, loader: 'vue' },
{ test: /\.js$/, loader: 'babel',
include: basePath,
}
]
}
},
webpackMiddleware: {
noInfo: true,
stats: 'errors-only'
},
files: [
{ pattern: 'tests/**/*.spec.js', watched: false },
],
exclude: [],
preprocessors: {
'app.js': ['webpack', 'babel'],
'tests/**/*.spec.js': [ 'babel', 'webpack' ]
},
})
}
Và package.json
{
"private": true,
"scripts": {
"prod": "gulp --production",
"dev": "gulp watch"
},
"devDependencies": {
"bootstrap-sass": "^3.3.7",
"gulp": "^3.9.1",
"jquery": "^3.1.0",
"laravel-elixir": "^6.0.0-11",
"laravel-elixir-vue-2": "^0.2.0",
"laravel-elixir-webpack-official": "^1.0.2",
"lodash": "^4.16.2",
"vue": "^2.0.1",
"vue-resource": "^1.0.3"
},
"dependencies": {
"jasmine-core": "^2.5.2",
"karma": "^1.3.0",
"karma-babel-preprocessor": "^6.0.1",
"karma-chrome-launcher": "^2.0.0",
"karma-firefox-launcher": "^1.0.0",
"karma-jasmine": "^1.0.2",
"karma-phantomjs-launcher": "^1.0.2",
"karma-webpack": "^1.8.0"
}
}
hãy thử mong đợi (true) .to.equal (true); –
Trong [karma-babel-preprocessor docs] (https://github.com/babel/karma-babel-preprocessor) nó nói: "Như của Babel 6.0, bạn cần nói cho Babel biết các tính năng sử dụng" I don ' t sử dụng webpack, nhưng tôi không thể nhìn thấy bạn thiết lập các cài đặt trước bất cứ nơi nào trong mã bạn đã hiển thị. –
Giống như craig đã nói, babel có các giai đoạn khác nhau của hỗ trợ es6, hãy thử sử dụng 'es2015' +' stage-3' trong '.babelrc' của bạn, sự kết hợp này transpiles tất cả tốt trong trường hợp của tôi. –