รัน Jasmine ด้วย Browser IE ผ่าน Karma
ปัญหาการใช้งาน IE ยังไม่จบไม่สิ้น คราวที่แล้วเป็นเรื่องรัน robot framework บน IE รอบนี้มาเจอปัญหารัน javascript unit test บน IE
javascript unit test ที่ใช้เป็น jasmine รันด้วย karma test runner บน Windows server 2012 ปัญหาที่เจอรอบนี้คือ เปิด IE ไม่ขึ้นเฉพาะตอนรันผ่าน jenkins (แต่ถ้ารัน manual ไม่เจอปัญหานี้)
เริ่มจากวิธีการตั้งค่าให้ karma หันมาใช้ IE ก่อน ด้วยการ install karma-ie-launcher ก่อน (ในตัวอย่างใช้ yarn แทนที่จะใช้ npm ถ้าใช้ npm ก็ไปดูคำสั่ง npm เอา)
yarn add --save-dev karma-ie-launcher
หรือถ้าใช้ npm ก็ตามนี้
npm install --save-dev karma-ie-launcher
เสร็จแล้วใน karma.conf.js ก็แก้เป็นประมาณนี้
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular/cli'],
plugins: [
require('karma-jasmine'),
require('karma-ie-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular/cli/plugins/karma')
],
client:{
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
reports: [ 'html', 'lcovonly' ],
fixWebpackSourcePaths: true
},
angularCli: {
environment: 'dev'
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['IE'],
singleRun: false
});
};
เสร็จแล้วก็รันเลย
yarn run ng test
หรือ
npm run test
ถ้าเป็น manual ทุกอย่างก็ดูโอเคดี แต่พอรันผ่าน jenkins มันไม่ใช่อย่างที่คิด
อ้าวเฮ้ย ปัญหามาอีกแล้ว ลอง google ดู มีคนแนะนำให้ปิด Automatic Crash Recovery ใน IE ก็ลองแล้ว แต่ไม่หาย (มีหลายคนหาย อาจจะเกิดจากคนละกรณี)
ไป google เพิ่มเติมก็เจอว่า มันเกิดจาก พฤติกรรมที่เปลี่ยนไปของ karma-ie-launcher ที่เดิมเวลามันเปิด IE มันจะใส่ flag ที่เป็น — extoff มาให้ด้วย แต่ในเวอร์ชั่นหลัง ๆ มันไม่ใส่มาให้ ดังนั้นเราต้องใส่เองโดยการแก้ใน karma.conf.js
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular/cli'],
plugins: [
require('karma-jasmine'),
require('karma-ie-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular/cli/plugins/karma')
],
client:{
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
reports: [ 'html', 'lcovonly' ],
fixWebpackSourcePaths: true
},
angularCli: {
environment: 'dev'
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['IE_no_addons'],
singleRun: false,
customLaunchers: {
IE_no_addons: {
base: 'IE',
flags: ['-extoff']
}
}
});
};
พอเสร็จแล้วรันใหม่ด้วยวิธี manual ดู ก็ไม่ติดปัญหาอะไร ลองเปลี่ยนมารันบน jenkins … Error ใหม่มาแล้วจ้า … สัส!!
เรื่องเก่าหายไปแล้ว เรื่องใหม่ มาอีกแล้ว ไปหาวิธีแก้ต่อ ก็ไปเจอวิธีแก้ปัญหาที่ดูน่าสนใจมาอีกวิธีตามนี้
- โหลด PsExec มาจาก https://technet.microsoft.com/en-us/sysinternals/bb897553
- รันคำสั่ง psexec -s -i “%programfiles%\Internet Explorer\iexplore.exe”
- มันจะเปิด IE ขึ้นมา IE มันจะถามโน่นนี่นั่น เหมือนเปิด IE มาใหม่ ๆ ก็ไป Set ค่าต่าง ๆ ที่ IE ตามที่มันถามให้เรียบร้อย
- ปิด IE
- เรียบร้อยแล้ว
เสร็จแล้วลองรันใหม่อีกที เฮ้ย หายแล้ว!!
จบ
อ้างอิง
- http://ccm.net/faq/14976-internet-explorer-enabling-disabling-the-automatic-crash-recovery-feature
- https://github.com/karma-runner/karma-ie-launcher#running-ie-in-no-add-ons-mode
- https://rostacik.net/2017/06/12/my-karma-tests-are-failing-in-ie-on-my-jenkins-and-i-dont-know-why/
ping back: http://www.chonla.com/execute-jasmine-tests-on-browser-ie-via-karma-test-runner/