2015-10-08 13 views
8

Phiên bản ngắn:mở Karma trang debug.html khi khởi động

Làm thế nào để khởi động Karma và có nó mở file debug.html tự động trong trình duyệt giống như Karma bắt đầu trang?

Phiên bản dài:

Tôi không phải là một fan hâm mộ lớn của việc sử dụng các phóng viên điều khiển cho Karma, vì vậy tôi đã được sử dụng karma-jasmine-html-reporter-livereload mà kết quả đầu ra để localhost Karma: 9876 tập tin/debug.html. Vấn đề là, mỗi khi tôi bắt đầu một phiên gỡ lỗi, tôi phải bấm vào nút 'gỡ lỗi' trong trang web mà nghiệp mở ra.

Tôi muốn tìm cách để nghiệp vụ tự động mở trang debug.html thông qua tác vụ gulp. Tôi chạy thử nghiệm trong nhiều trình duyệt, vì vậy tôi muốn trang debug.html mở dưới dạng tab thứ hai trong mỗi trình duyệt mà Karma mở ra. Tôi cũng muốn có thể đóng tab debug.html đó khi karma đóng. Tôi đã thử một loạt các thứ, không thành công.

Đây là nhiệm vụ nuốt chửng của tôi. Nhiệm vụ 'watch' xem các tệp TypeScript nguồn của tôi và biên dịch chúng thành javascript ... không có gì lạ mắt.

gulp.task('watch-test', ['watch'], function (done) { 
    //start a livereload server so that the karma html 
    //reporter knows to reload whenever the scripts change 
    livereload.listen(35729); 
    gulp.watch('dist/src/**/*.js').on('change', livereload.changed); 

    new KarmaServer({ 
     configFile: __dirname + '/karma.conf.js', 
     singleRun: false 
    }, done).start(); 
}); 
+0

Tôi đồng ý, thật khó chịu khi phải nhấp vào đó mọi lúc, đặc biệt là khi sử dụng karma-jasmine-html-reporter-livereload. Tôi đã tự hỏi điều tương tự. Bạn có thể đăng những gì bạn đã thử để tôi không phát minh lại bánh xe của bạn không? – MaxRocket

Trả lời

5

Tôi tìm thấy một cách mà làm cho nó vĩnh viễn mặc dù nó không phải là hoàn hảo .. Bạn có thể tiêm vào bối cảnh một javascript:

files: [ 
    "test/init.js", 
    ... 
] 

và đặt bên trong các tập tin mã này:

(function (window) { 
    if (!window.parent.initDone && window.location.pathname === '/context.html') { 
     window.parent.initDone = true; 
     window.open('/debug.html', '_blank'); 
    } 
})(window) 

điều này sẽ đảm bảo rằng cửa sổ chỉ mở khi lần đầu tiên các thử nghiệm được chạy và nó sẽ chỉ được thực hiện trong context.html.

Bạn có thể thêm bất kỳ mã init nào bạn muốn vào trong khối đó.

+0

Vẫn còn một chút hack, nhưng điều này thực hiện chính xác những gì tôi cần! Và điều tốt đẹp là tôi có thể kiểm tra tệp đó trong và bây giờ mọi người trong nhóm đều nhận được tính năng này với cấu hình bằng không. Cảm ơn! – TwitchBronBron

+0

Bạn được chào đón;) – ntrp

+1

Tôi đang sử dụng kết hợp này với cài đặt 'customLaunchers' của nghiệp vụ để chuyển các' --auto-open-devtools-for-tabs' và ''--user-data-dir =' + path .resolve (__ dirname, './. chrome') 'flags thành Chrome dẫn đến một cửa sổ mở ra trong cùng một vị trí với cùng một bố cục devtools đã mở cho mỗi tab chạy. –

2

Tôi không thể tìm ra một cách sang trọng để làm điều đó, vì vậy đây là một trò gian lận bẩn thỉu, thấp, không tốt, thối, hoàn toàn đáng xấu hổ, nhưng nó hoạt động. :)

Trong node_modules> nghiệp> tĩnh> karma.js tôi đã thêm các dòng sau:

var debugWin = window.open('http://localhost:7676/debug.html','Debugme'); 
debugWin.focus(); 

Dưới đây trong bối cảnh, bắt đầu từ khoảng dòng 366 (trong phiên bản 0.13.19):

var updateBanner = function (status) { 
    return function (param) { 
     var paramStatus = param ? status.replace('$', param) : status 
     titleElement.innerHTML = 'Karma v' + VERSION + ' - ' + paramStatus 
     bannerElement.className = status === 'connected' ? 'online' : 'offline' 
    } 
    } 

    var debugWin = window.open('http://localhost:7676/debug.html','Debugme'); 
    debugWin.focus(); 

    socket.on('connect', updateBanner('connected')) 
    socket.on('disconnect', updateBanner('disconnected')) 
    socket.on('reconnecting', updateBanner('reconnecting in $ ms...')) 
    socket.on('reconnect', updateBanner('connected')) 
    socket.on('reconnect_failed', updateBanner('failed to reconnect')) 
    socket.on('info', updateBrowsersInfo) 
    socket.on('disconnect', function() { 
    updateBrowsersInfo([]) 
    }) 
} 

Tận hưởng. Bạn nổi dậy, bạn.

+1

Rất sáng tạo. :) Thật không may điều này không hoàn toàn có sự vĩnh cửu mà tôi đang tìm kiếm.Nếu tôi xóa thư mục node_modules của tôi, hoặc một người khác trong nhóm của tôi kéo mã xuống và chạy nó, thay đổi này sẽ không được lưu lại cho họ trừ khi tôi cũng kiểm tra trong thư mục node_modules với ít nhất tệp này trong đó. – TwitchBronBron

+0

Xuống và bẩn, như tôi đã nói. Nếu bạn đến với bất cứ điều gì lâu dài hơn, hãy chắc chắn để đăng nó ở đây xin vui lòng! – MaxRocket

0

Bạn có thể sử dụng một định nghĩa customLauncher trình duyệt:

customLaunchers: { 
    ChromeDebugging: { 
     base: 'Chrome', 
     flags: [ '--remote-debugging-port=9333', '--auto-open-devtools-for-tabs', 'http://localhost:9876/debug.html' ] 
    } 
    } 

Và sử dụng trình duyệt này trong cấu hình nghiệp của bạn.

Các vấn đề liên quan