Angular.js: 1.5.0-rc.1์ด PhantomJS 1.x + Karma ํ™˜๊ฒฝ์—์„œ ๋กœ๋“œ๋˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2016๋…„ 01์›” 18์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: angular/angular.js

๋ฐฉ๊ธˆ 1.5.0-rc.1๋กœ ์—…๋ฐ์ดํŠธํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋Š”๋ฐ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. Karma ๋ฐ PhantomJS์˜ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋Š” rc1๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด์ง€๋งŒ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

[email protected] ๋ฐ [email protected] ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์š”์ ์˜ package.json ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ด ์š”์ง€์—์„œ ํŒŒ์ผ์„ ๋ณต์ œ, ๋ณต์ œ ๋ฐ ๋ณด๋ ค๋ฉด https://gist.github.com/mattdsteele/33f9b237fd13e9edc222

๋‚ด๊ฐ€๋ณด๊ณ ์žˆ๋Š” ์˜ค๋ฅ˜ :

Error: [$injector:modulerr] Failed to instantiate module ng due to:
TypeError: 'undefined' is not an object (evaluating 'Function.prototype.bind.apply')
    at instantiate (C:/app/node_modules/angular/angular.js:4622)
    at provider (C:/app/node_modules/angular/angular.js:4433)
    at C:/app/node_modules/angular/angular.js:385
    at forEach (C:/app/node_modules/angular/angular.js:355)
    at C:/app/node_modules/angular/angular.js:4423
    at ngModule (C:/app/node_modules/angular/angular.js:2492)
    at invoke (C:/app/node_modules/angular/angular.js:4604)
    at runInvokeQueue (C:/app/node_modules/angular/angular.js:4497)
    at C:/app/node_modules/angular/angular.js:4506
    at forEach (C:/app/node_modules/angular/angular.js:341)
    at loadModules (C:/app/node_modules/angular/angular.js:4529)
    at createInjector (C:/app/node_modules/angular/angular.js:4409)
    at workFn (C:/app/node_modules/angular-mocks/angular-mocks.js:2799)
    at C:/app/node_modules/angular-mocks/angular-mocks.js:2779
    at C:/app/sampleProvider_spec.js:38
http://errors.angularjs.org/1.5.0-rc.1/$injector/modulerr?p0=ng&p1=TypeError%3A%20'undefined'%20is%20not%20an%20object%20(evaluating%20'Function.prototype.bind.apply')%0A%20%20%20%20at%20instantiate%20(http%3A%2F%2Flocalhost%3A9876%2FC:/app%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4622)%0A%20%20%20%20at%20provider%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4433)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A385%0A%20%20%20%20at%20forEach%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A355)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4423%0A%20%20%20%20at%20ngModule%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A2492)%0A%20%20%20%20at%20invoke%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4604)%0A%20%20%20%20at%20runInvokeQueue%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4497)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4506%0A%20%20%20%20at%20forEach%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A341)%0A%20%20%20%20at%20loadModules%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4529)%0A%20%20%20%20at%20createInjector%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular%2Fangular.js%3F0bb3a8e438d28a96d20c57229ea2d6f6be3eedbc%3A4409)%0A%20%20%20%20at%20workFn%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular-mocks%2Fangular-mocks.js%3F15873dbd705e0c8571c8c5d0a1bd3d60324beb9c%3A2799)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fangular-mocks%2Fangular-mocks.js%3F15873dbd705e0c8571c8c5d0a1bd3d60324beb9c%3A2779%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2FsampleProvider_spec.js%3F264ed98e3af6ef6813ab2d8fdc752a9b30a6e6db%3A38%0A%20%20%20%20at%20attemptSync%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1886)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1874%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1859%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A697%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A363%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2479%0A%20%20%20%20at%20attemptAsync%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1916)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1871%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1859%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A697%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2473%0A%20%20%20%20at%20attemptAsync%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1916)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1871%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1898%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1842%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2467%0A%20%20%20%20at%20clearStack%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A660)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1881%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1898%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1842%0A%20%20%20%20at%20complete%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A371)%0A%20%20%20%20at%20clearStack%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A660)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1881%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1859%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A697%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A363%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2479%0A%20%20%20%20at%20attemptAsync%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1916)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1871%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1859%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A697%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2473%0A%20%20%20%20at%20attemptAsync%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1916)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1871%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1859%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A697%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2473%0A%20%20%20%20at%20attemptAsync%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1916)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1871%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A1859%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A697%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A2332%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fjasmine-core%2Flib%2Fjasmine-core%2Fjasmine.js%3F391e45351df9ee35392d2e5cb623221a969fc009%3A761%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fnode_modules%2Fkarma-jasmine%2Flib%2Fadapter.js%3F3030709c83121e1b2ca4d1e657306b834fc13350%3A318%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fkarma.js%3A191%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fcontext.html%3A48
    at forEach (C:/app/node_modules/angular/angular.js:341)
    at loadModules (C:/app/node_modules/angular/angular.js:4529)
    at createInjector (C:/app/node_modules/angular/angular.js:4409)
    at workFn (C:/app/node_modules/angular-mocks/angular-mocks.js:2799)
    at C:/app/node_modules/angular-mocks/angular-mocks.js:2779
    at C:/app/sampleProvider_spec.js:38
    at C:/app/node_modules/angular/angular.js:4527
TypeError: 'undefined' is not an object (evaluating 'sample.getValue')
    at C:/app/sampleProvider_spec.js:42
PhantomJS 1.9.8 (Windows 7 0.0.0): Executed 2 of 2 (2 FAILED) ERROR (0.014 secs / 0.007 secs)

๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.

  • angular ๋ฐ angular-mocks ์„ 1.5.0-rc.0 ๋˜๋Œ๋ฆฌ๊ธฐ
  • ๋Ÿฐ์ฒ˜๋ฅผ PhantomJS ์—์„œ Chrome

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ์— ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

  • ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ๋ฅผ Jasmine์—์„œ Mocha๋กœ ์ „ํ™˜

Windows 7 ๋ฐ OS X์—์„œ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

won't fix

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

PhantomJS2๋ฅผ ํด๋ฆฌํ•„์˜ ๋Œ€์•ˆ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. npm ์ข…์†์„ฑ karma-phantom-launcher๋ฅผ karma-phantomjs2-launcher๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค(์ž‘์„ฑ โ€‹โ€‹๋‹น์‹œ ๋ฒ„์ „ 0.4.0).
  2. karma.conf ๋ธŒ๋ผ์šฐ์ €๋ฅผ 'PhantomJS'์—์„œ 'PhantomJS2'๋กœ ๋ณ€๊ฒฝ

๋ชจ๋“  9 ๋Œ“๊ธ€

Phantom 1.x์—๋Š” Function.prototype.bind๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Phantom 2.x ๋˜๋Š” polyfill์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

polyfill์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ์šฐ๋ฆฌ ์ฝ”๋“œ( MDN ๋ฒ„์ „ )์— ์ด๋ฏธ Function.prototype.bind ํด๋ฆฌํ•„์ด ์žˆ์—ˆ์ง€๋งŒ PhantomJS ํ™˜๊ฒฝ์—์„œ๋Š” ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ํด๋ฆฌํ•„๋กœ ์ „ํ™˜ํ•˜๋ฉด ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋” ๋„๋ฆฌ ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์ด ๋ฐ˜๋“œ์‹œ ๋ธŒ๋ ˆ์ดํ‚น ์ฒด์ธ์ง€์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ Phantom 1.x + Karma์˜ ์‚ฌ์šฉ์ด ์ถฉ๋ถ„ํ•˜๋ฏ€๋กœ ์ด๊ฒƒ์ด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

PhantomJs๋Š” ๊ณต์‹์ ์œผ๋กœ ์ง€์›๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋˜ํ•œ Phantom JS 1์€ ๋งค์šฐ ์˜ค๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์—์„œ ์†Œ์…œ ์ฑ„๋„์— ์˜์กดํ•˜์—ฌ ์†Œ๋ฌธ์„ ํผ๋œจ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ ๋•Œ๋ฌธ์— ์ž ์‹œ ์ด ๋ฌธ์ œ๋ฅผ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค.

PhantomJS2๋ฅผ ํด๋ฆฌํ•„์˜ ๋Œ€์•ˆ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. npm ์ข…์†์„ฑ karma-phantom-launcher๋ฅผ karma-phantomjs2-launcher๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค(์ž‘์„ฑ โ€‹โ€‹๋‹น์‹œ ๋ฒ„์ „ 0.4.0).
  2. karma.conf ๋ธŒ๋ผ์šฐ์ €๋ฅผ 'PhantomJS'์—์„œ 'PhantomJS2'๋กœ ๋ณ€๊ฒฝ

@gilius ์ข‹์€ ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋” ์ด์ƒ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์—†์œผ๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ณ€๊ฒฝ ๋กœ๊ทธ์— ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ณต์‹์ ์œผ๋กœ PhamtomJS๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—

์ฐธ๊ณ : karma-phantomjs2-launcher๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. karma-phantomjs-launcher๋ฅผ "1.0.0"์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ๋™์ผํ•œ ํšจ๊ณผ(PhantomJS 2.1.1)๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ karma.conf๋ฅผ ํŽธ์ง‘ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋ฅผ์œ„ํ•œ. https://www.npmjs.com/package/phantomjs-polyfill
๊ทธ ํด๋ฆฌํ•„์ด ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์œ„์— ๋‚˜์—ด๋œ ๋ฐ”์šฐ์–ด ํ•˜๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค..

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰