2012-11-01 32 views
8

Tôi đã tạo một ứng dụng Web đơn giản bằng cách sử dụng express.js và muốn thử nghiệm nó với jasmine-node. Hoạt động tốt cho đến nay nhưng vấn đề của tôi là tôi phải khởi động máy chủ theo cách thủ công mỗi lần trước khi tôi có thể chạy thử nghiệm của mình.Tự động hóa Jasmine-Node và express.js

Bạn có thể giúp tôi cách viết một trình trợ giúp thông số chạy máy chủ (với một cổng khác sau đó là cổng phát triển của tôi) chỉ để kiểm tra và sau đó giết nó sau đó?

+0

Bạn đang chạy phiên bản Express nào? – srquinn

+0

Tôi đang sử dụng phiên bản 3.x (3.0.2 ngay bây giờ). – optikfluffel

Trả lời

16

Đây là những gì tôi làm:

tôi có một server.js tập tin bên trong thư mục gốc của dự án nút của tôi rằng thiết lập ứng dụng nút máy chủ lication (với tốc) và kim ngạch xuất khẩu 2 phương pháp:

exports.start = function(config, readyCallback) { 

    if(!this.server) { 

     this.server = app.listen(config.port, function() { 

      console.log('Server running on port %d in %s mode', config.port, app.settings.env); 

      // callback to call when the server is ready 
      if(readyCallback) { 
       readyCallback(); 
      } 
     }); 
    } 
}; 

exports.close = function() { 
    this.server.close(); 
}; 

Các app.js tập tin sẽ được đơn giản vào thời điểm này:

var server = require('./server'); 
server.start({ port: 8000 }); 

Vì vậy, các tập tin/thư mục cấu trúc cơ bản sẽ được như sau :

src 
    app.js 
    server.js 

Có tách này sẽ cho phép bạn chạy các máy chủ thường:

node src/app.js 

.. và/hoặc yêu cầu nó từ một kịch bản nút tùy chỉnh, mà có thể là một kịch bản nút (hoặc một jake/grunt/bất cứ công việc), được thực hiện các xét nghiệm của bạn như thế này:

/** my-test-task.js */ 

// util that spawns a child process 
var spawn = require('child_process').spawn; 

// reference to our node application server 
var server = require('./path/to/server.js'); 

// starts the server 
server.start({ port: 8000 }, function() { 

    // on server ready launch the jasmine-node process with your test file 
    var jasmineNode = spawn('jasmine-node', [ '.path/to/test/file.js' ]); 

    // logs process stdout/stderr to the console 
    function logToConsole(data) { 
     console.log(String(data)); 
    } 
    jasmineNode.stdout.on('data', logToConsole); 
    jasmineNode.stderr.on('data', logToConsole); 

    jasmineNode.on('exit', function(exitCode) { 
     // when jasmine-node is done, shuts down the application server 
     server.close(); 
    } 
}); 
+0

Ok Tôi đã nhận được nó từ trước tới nay. Nếu bạn nói với tôi bây giờ làm thế nào để thoát khỏi máy chủ-đầu ra (như: _GET/200 46ms - 167_) trong kiểm tra đầu ra của tôi everythings tốt :) – optikfluffel

+0

Dường như bạn có một cái gì đó cấu hình trong ứng dụng máy chủ nút của bạn ghi lại các yêu cầu, một middleware profiler cho thể hiện có thể? Kiểm tra mã máy chủ tốc hành của bạn;) – BFil

+0

Xin lỗi, đã tìm thấy app.use bị lãng quên (express.logger ('dev')); Cảm ơn ^^ – optikfluffel

0

Tôi sử dụng Mocha - tương tự như damn - nhưng nguyên tắc tương tự cũng nên áp dụng: bạn có thể thử require nhập tệp app.js trong móc 'beforeEach' bên trong chính describe. Điều đó sẽ kích hoạt nó cho bạn.

+0

OK sau đó nó cháy và các thử nghiệm đang chạy nhưng nó không dừng lại và thất bại nếu tôi sử dụng tùy chọn --autotest (hoặc làm tương tự) và nó không dừng lại nếu tôi chỉ muốn chạy thử nghiệm một lần. Trên hết, bây giờ tôi có đầu ra http (GET/200 6ms - 167) trong kết quả thử nghiệm của mình. Làm cách nào để loại bỏ điều này? – optikfluffel

+0

bạn có ví dụ về điều này không? – chovy

+0

Đây là ví dụ về đầu ra: http://pastebin.com/9qF1NeU1 và tại đây của server_spec.coffee: http: // pastebin.com/uvcBuTiy – optikfluffel

0

Giả sử bạn sử dụng một số mã mà gọi app.listen() trong server.js, không yêu cầu các tập tin trên mỗi lần chạy nhưng chỉ một lần và sau đó có hai chức năng như

startServer = -> app.listen(3000) 
stopServer = -> app.close() 

Sau đó, bạn có thể sử dụng chúng trong beforeEachafterEach

+0

không hoạt động, đoạn trích từ @ShadowCloud thật tuyệt vời :) – optikfluffel

-1

Nếu bạn muốn sau đó đi thêm một bước nữa trong việc tự động hóa thử nghiệm của bạn trong khi bạn phát triển, bạn có thể đi vào dòng thiết bị đầu cuối của bạn và thực hiện

jasmine-node . --autotest 

Jasmine sau đó sẽ ở lại danh sách liên quan đến mọi tệp trong dự án của bạn và bất cứ khi nào bạn thực hiện thay đổi, bạn sẽ biết liệu đoạn mã đó có vi phạm bất kỳ thử nghiệm nào không;)

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