Phát triển theo hướng thử nghiệm Meteor [đã đóng]


120

Tôi không biết cách thực hiện phát triển theo hướng thử nghiệm trong sao băng.

Tôi không thấy nó được đề cập ở bất kỳ đâu trong tài liệu hoặc Câu hỏi thường gặp. Tôi không thấy bất kỳ ví dụ hoặc bất cứ điều gì tương tự.

Tôi thấy rằng một số gói đang sử dụng Tinytest.

Tôi cần phản hồi từ các nhà phát triển, lộ trình liên quan đến điều này là gì. Một cái gì đó dọc theo dòng của:

  • có thể, không cần tài liệu, hãy tự tìm hiểu
  • sao băng không được xây dựng theo cách mà bạn có thể tạo ra các ứng dụng có thể thử nghiệm
  • đây là tính năng được lên kế hoạch
  • Vân vân

4
Hãy xem blog xolv.io , như đã đề cập bên dưới, có các ví dụ về việc thực hiện TDD Unit + End-to-end thích hợp bằng Meteor.
Xolv.io

Từ giọng điệu câu hỏi của bạn, có vẻ như bạn có ấn tượng rằng Meteor còn thiếu khá nhiều thứ. Theo một cách nào đó thì đúng là như vậy, nhưng bầu không khí.meteor.com có ​​các gói để thực hiện hầu hết mọi thứ bạn có thể nghĩ đến bằng cách gói các thư viện JS hiện có ở định dạng sẵn sàng sử dụng. Nó có thể được liên kết nhiều hơn trên meteor.com, IMHO.
pipedreambomb

5
bạn nên thanh toán laika - arunoda.github.io/laika
Arunoda Susiripala

1
Thử nghiệm sao băng hiện đang là một mớ hỗn độn. Xem trello.com/c/BQ3gu0no/12-official-testing-framework để biết các bản cập nhật.
Andrew Mao

Câu trả lời:


83

Cập nhật 3 : Kể từ Meteor 1.3, sao băng bao gồm hướng dẫn kiểm tra với các hướng dẫn từng bước cho đơn vị, tích hợp, chấp nhận và kiểm tra tải.

Cập nhật 2 : Kể từ ngày 9 tháng 11 năm 2015, Velocity không còn được duy trì . Xolv.io đang tập trung nỗ lực của họ vào Tinh tinhNhóm Phát triển Sao băng phải chọn một khung thử nghiệm chính thức .

Cập nhật : Velocitygiải pháp thử nghiệm chính thức của Meteor kể từ 0.8.1.


Không có nhiều bài viết về kiểm tra tự động với Meteor tại thời điểm này. Tôi hy vọng cộng đồng Meteor sẽ phát triển thử nghiệm các phương pháp hay nhất trước khi thiết lập bất kỳ điều gì trong tài liệu chính thức. Rốt cuộc, Meteor đã đạt 0,5 điểm trong tuần này, và mọi thứ vẫn đang thay đổi nhanh chóng.

Tin tốt là bạn có thể sử dụng các công cụ kiểm tra Node.js với Meteor .

Đối với dự án Meteor của tôi, tôi chạy thử nghiệm đơn vị của mình với Mocha bằng cách sử dụng Chai để xác nhận. Nếu bạn không cần bộ tính năng đầy đủ của Chai, tôi khuyên bạn nên sử dụng should.js thay thế. Tôi chỉ có các bài kiểm tra đơn vị vào lúc này, mặc dù bạn cũng có thể viết các bài kiểm tra tích hợp với Mocha.

Đảm bảo đặt các bài kiểm tra của bạn trong thư mục "tests" để Meteor không cố gắng thực hiện các bài kiểm tra của bạn.

Mocha hỗ trợ CoffeeScript , lựa chọn ngôn ngữ viết kịch bản của tôi cho các dự án Meteor. Đây là một tệp Cakefile mẫu với các tác vụ để chạy các bài kiểm tra Mocha của bạn. Nếu bạn đang sử dụng JS với Meteor, hãy điều chỉnh các lệnh cho Makefile.

Các mô hình Meteor của bạn sẽ cần một chút sửa đổi để tiếp xúc với Mocha và điều này đòi hỏi một số kiến ​​thức về cách hoạt động của Node.js. Hãy coi mỗi tệp Node.js đang được thực thi trong phạm vi riêng của nó. Meteor tự động hiển thị các đối tượng trong các tệp khác nhau với nhau, nhưng các ứng dụng Node thông thường — như Mocha — không làm được điều này. Để Mocha có thể kiểm tra các mô hình của chúng tôi, hãy xuất từng mô hình Meteor với mẫu CoffeeScript sau:

# Export our class to Node.js when running
# other modules, e.g. our Mocha tests
#
# Place this at the bottom of our Model.coffee
# file after our Model class has been defined.
exports.Model = Model unless Meteor?

... và ở đầu bài kiểm tra Mocha của bạn, hãy nhập mô hình bạn muốn kiểm tra:

# Need to use Coffeescript's destructuring to reference
# the object bound in the returned scope
# http://coffeescript.org/#destructuring
{Model} = require '../path/to/model'

Cùng với đó, bạn có thể bắt đầu viết và chạy các bài kiểm tra đơn vị với dự án Meteor của mình!


2
Tôi đã thử điều này và gặp sự cố khi mã của tôi đang được kiểm tra sử dụng bất kỳ Meteor.whateverchức năng nào . Tôi nhận được Meteor là lỗi không xác định. Có cách nào để yêu cầu Meteor một cách rõ ràng để giải quyết vấn đề này không?
Christian Schlensker

2
Christian, cách tiếp cận được mô tả trong câu trả lời của tôi tại thời điểm này chưa hoàn chỉnh, vì nó không chạy phiên bản đầy đủ của ứng dụng Meteor của bạn. Do đó, Meteorđối tượng không thể truy cập được, cũng như bất kỳ phụ thuộc mô hình nào được Meteor tiếp xúc. Cải thiện quy trình này sẽ liên quan đến việc khởi tạo môi trường của ứng dụng trong Mocha và đưa Meteorđối tượng vào các thử nghiệm của bạn. Tôi chắc chắn sẽ cập nhật câu trả lời này sau khi tôi có giải pháp thử nghiệm hoàn chỉnh hơn. Trong thời gian chờ đợi, vui lòng liên hệ với tôi nếu có bất kỳ câu hỏi nào hoặc các cải tiến được đề xuất.
Áo khoác đen,

@ChristianSchlensker: Nếu bạn sử dụng Mocha để kiểm tra chức năng / đơn vị ở phía máy khách thì bạn có sẵn các đối tượng Meteor. Xem mã mẫu trong câu trả lời của tôi bên dưới.
jerico

@jerico Vâng, có vẻ tốt, sẽ không hoạt động với bất kỳ lớp nào phía máy chủ. Ngoài ra, tôi thích có mocha - đồng hồ chạy trên tất cả các bài kiểm tra đơn vị mọi lúc. Chúng chạy phía máy chủ nhanh đến mức tạo ra phản hồi thử nghiệm thực sự tốt.
Christian Schlensker

1
kể từ ngày 1.3 thử nghiệm hiện có sẵn trong sao băng, xem guide.meteor.com
bigmadwolf

44

Xin chào tất cả kiểm tra laika - khung thử nghiệm hoàn toàn mới cho sao băng http://arunoda.github.io/laika/

Bạn có thể kiểm tra cả máy chủ và máy khách cùng một lúc.

Tuyên bố từ chối trách nhiệm: Tôi là tác giả của Laika.


Chào Arunoda. Tôi đánh giá cao công việc khó khăn của bạn cho Meteor. Tuy nhiên, tại StackOverflow, bạn nên chỉ ra như một tuyên bố từ chối trách nhiệm rằng bạn là người đứng sau laika.
nalply

5
Đó có phải là cách để làm điều đó?
Arunoda Susiripala

1
Cảm ơn vì sự hợp tác của bạn.
nalply

14

Tôi nhận ra rằng câu hỏi này đã được trả lời, nhưng tôi nghĩ câu hỏi này có thể sử dụng thêm một số ngữ cảnh, dưới dạng một câu trả lời bổ sung cung cấp ngữ cảnh đã nói.

Tôi đã thực hiện một số phát triển ứng dụng với sao băng, cũng như phát triển gói, bằng cách triển khai một gói cho lõi sao băng, cũng như cho bầu khí quyển .

Có vẻ như câu hỏi của bạn thực sự có thể là một câu hỏi gồm ba phần:

  1. Làm cách nào để chạy toàn bộ bộ thử nghiệm sao băng?
  2. Làm thế nào để một người viết và chạy các thử nghiệm cho các gói thông minh riêng lẻ ?
  3. Làm thế nào để một người viết và chạy các bài kiểm tra cho ứng dụng của riêng mình?

Và, có vẻ như có một câu hỏi bổ sung ở đâu đó: 4. Làm cách nào để có thể triển khai tích hợp liên tục cho 1, 2 và 3?

Tôi đã nói chuyện và bắt đầu cộng tác với Naomi Seyfer (@sixolet) trong nhóm nòng cốt của sao băng để giúp đưa ra câu trả lời chính xác cho tất cả những câu hỏi này trong tài liệu.

Tôi đã gửi một yêu cầu kéo ban đầu theo địa chỉ 1 và 2 tới lõi sao băng: https://github.com/meteor/meteor/pull/573 .

Gần đây tôi cũng đã trả lời câu hỏi này: Làm cách nào để bạn chạy thử nghiệm sao băng?

Tôi nghĩ rằng @Blackcoat đã trả lời dứt khoát 3, ở trên.

Đối với phần thưởng, 4, tôi khuyên bạn nên sử dụng circleci.com ít nhất để tích hợp liên tục cho các ứng dụng của riêng bạn. Họ hiện hỗ trợ trường hợp sử dụng mà @Blackcoat đã mô tả. Tôi có một dự án trong đó tôi đã nhận thành công các bài kiểm tra được viết bằng coffeescript để chạy các bài kiểm tra đơn vị với mocha, giống như @Blackcoat đã mô tả.

Để tích hợp liên tục trên lõi sao băng và các gói thông minh, Naomi Seyfer và tôi đang trò chuyện với người sáng lập circleci để xem liệu chúng ta có thể triển khai điều gì đó tuyệt vời trong thời gian tới hay không.


12

RTD hiện đã không được dùng nữa và được thay thế bằng Velocity, đây là khung thử nghiệm chính thức cho Meteor 1.0. Tài liệu vẫn còn tương đối mới vì Velocity đang được phát triển nặng. Bạn có thể tìm thêm một số thông tin trên repo Velocity Github , Trang chủ VelocityHướng dẫn kiểm tra sao băng (nội dung trả phí)

Tuyên bố từ chối trách nhiệm: Tôi là một trong những thành viên cốt lõi của Velocity và là tác giả của cuốn sách.


Kiểm tra RTD, một khuôn khổ kiểm tra đầy đủ cho Meteor đây rtd.xolv.io . Nó hỗ trợ Jasmine / Mocha / custom và hoạt động với cả JS đơn giản và cà phê. Nó cũng bao gồm phạm vi kiểm tra kết hợp phạm vi bảo hiểm đơn vị / máy chủ / khách hàng.

Và một dự án ví dụ ở đây

Một blog để giải thích thử nghiệm đơn vị với Meteor tại đây

Phương pháp tiếp cận kiểm tra chấp nhận e2e sử dụng Selenium WebdriverJS và Meteor tại đây

Hy vọng rằng sẽ giúp. Tuyên bố từ chối trách nhiệm: Tôi là tác giả của RTD.


6

Tôi đã sử dụng trang này rất nhiều và đã thử tất cả các câu trả lời, nhưng từ điểm xuất phát của tôi, tôi thấy chúng khá khó hiểu. Một khi tôi gặp bất kỳ sự cố nào, tôi đã bối rối không biết làm thế nào để khắc phục chúng.

Giải pháp này thực sự đơn giản để bắt đầu, nếu chưa được ghi lại đầy đủ, vì vậy tôi khuyên bạn nên áp dụng nó cho những người như bản thân tôi, những người muốn thực hiện TDD nhưng không chắc cách kiểm tra trong JavaScript hoạt động và thư viện nào cắm vào những gì:

https://github.com/mad-eye/meteor-mocha-web

FYI, tôi nhận thấy rằng mình cũng cần sử dụng gói Khí quyển của bộ định tuyến để tạo tuyến '/ tests' để chạy và hiển thị kết quả từ các bài kiểm tra, vì tôi không muốn nó làm lộn xộn ứng dụng của mình mỗi khi tải.


1
Bạn cũng có thể sử dụng meteor-mocha-webwith mocha-phantomjsđể tự động kiểm tra và cho CI. Đó là những gì chúng tôi sử dụng. Tiết lộ đầy đủ - Tôi là một trong những người bảo trì meteor-mocha-web.
jagill

6

Về cách sử dụng tinytest, bạn có thể muốn xem các nguồn ressource hữu ích đó:

  1. Những điều cơ bản được giải thích trong video màn hình này: https://www.eventedmind.com/feed/meteor-testing-packages-with-tinytest

  2. Khi bạn đã hiểu ý tưởng, bạn sẽ muốn có tài liệu API công khai tinytest. Hiện tại, tài liệu duy nhất cho điều đó nằm ở cuối nguồn của tinytestgói: https://github.com/meteor/meteor/tree/devel/packages/tinytest

  3. Ngoài ra, screencast nói về vấn đề này test-helpers, bạn có thể muốn xem tất cả các trợ giúp có sẵn tại đây: https://github.com/meteor/meteor/tree/devel/packages/test-helpers Thường có một số tài liệu bên trong mỗi tập tin

  4. Việc đào sâu các bài kiểm tra hiện có về các gói của thiên thạch sẽ cung cấp rất nhiều ví dụ. Một cách để thực hiện việc này là thực hiện tìm kiếm Tinytest.hoặc test.trong thư mục gói của mã nguồn sao băng


5

Thử nghiệm trở thành một phần cốt lõi của Meteor trong phiên bản 1.3 sắp tới. Giải pháp ban đầu dựa trên Mocha và Chai.

Các cuộc thảo luận ban đầu về thiết kế khả thi tối thiểu có thể được tìm thấy ở đây và chi tiết của việc triển khai đầu tiên có thể được tìm thấy tại đây .

MDG đã tạo ra phần cơ bản ban đầu của tài liệu hướng dẫn cho thử nghiệm có thể được tìm thấy tại đây và có một số thử nghiệm ví dụ ở đây .

Đây là một ví dụ về thử nghiệm xuất bản từ liên kết ở trên:

  it('sends all todos for a public list when logged in', (done) => {
    const collector = new PublicationCollector({userId});
    collector.collect('Todos.inList', publicList._id, (collections) => {
      chai.assert.equal(collections.Todos.length, 3);
      done();
    });
  });

4

Tôi đang thực hiện chức năng / tích hợp kiểm tra với Meteor + Mocha trong trình duyệt. Tôi có vài thứ dọc theo những dòng sau (trong coffeescript để dễ đọc hơn):

Trên máy khách ...

Meteor.startup ->
    Meteor.call 'shouldTest', (err, shouldTest) ->
        if err? then throw err
        if shouldTest then runTests()

# Dynamically load and run mocha. I factored this out in a separate method so
# that I can (re-)run the tests from the console whenever I like.
# NB: This assumes that you have your mocha/chai scripts in .../public/mocha.
# You can point to a CDN, too.
runTests = ->
    $('head').append('<link href="https://stackoverflow.com/mocha/mocha.css" rel="stylesheet" />')
    $.getScript '/mocha/mocha.js', ->
      $.getScript '/mocha/chai.js', ->
        $('body').append('<div id="mocha"> </div>')
        chai.should() # ... or assert or explain ...
        mocha.setup 'bdd'
        loadSpecs() # This function contains your actual describe(), etc. calls.
        mocha.run()

... và trên máy chủ:

Meteor.methods 'shouldTest': -> true unless Meteor.settings.noTests  # ... or whatever.

Tất nhiên, bạn có thể thực hiện kiểm tra đơn vị phía máy khách của mình theo cách tương tự. Tuy nhiên, đối với thử nghiệm tích hợp, thật tuyệt khi có tất cả cơ sở hạ tầng Meteor.


BTW: Giải pháp chờ các phần tử DOM này rất hữu ích khi thực hiện các kiểm tra chức năng trong ứng dụng khách Meteor với jQuery.
jerico


2

Một tùy chọn khác, được cung cấp dễ dàng kể từ 0.6.0, là chạy toàn bộ ứng dụng của bạn từ các gói thông minh cục bộ, với một lượng mã tối thiểu bên ngoài các gói để khởi động ứng dụng của bạn (có thể gọi một gói thông minh cụ thể là nền tảng của ứng dụng).

Sau đó, bạn có thể tận dụng Meteor's Tinytest, một ứng dụng tuyệt vời để thử nghiệm các ứng dụng Meteor.


0

Tôi đã sử dụng thành công xolvio: dưa chuột và tốc độ để thực hiện thử nghiệm của mình. Hoạt động thực sự tốt và chạy liên tục để bạn luôn có thể thấy rằng các bài kiểm tra của mình đang vượt qua.


0

Meteor + TheIntern

Bằng cách nào đó, tôi đã kiểm tra ứng dụng Meteor với TheIntern.js.

Mặc dù nó là theo nhu cầu của tôi.Nhưng tôi vẫn nghĩ rằng nó có thể dẫn ai đó đi đúng hướng và tôi đang chia sẻ những gì tôi đã làm để giải quyết vấn đề này.

Có một executechức năng cho phép chúng tôi chạy mã JS mà chúng tôi có thể truy cập windowđối tượng trình duyệt và do đóMeteor cũng có thể.

Bạn muốn biết thêm về thực thi

Đây là cách tôi test suitetìm kiếm Kiểm tra chức năng

define(function (require) {
    var registerSuite = require('intern!object');
    var assert = require('intern/chai!assert');
    registerSuite({
        name: 'index',

        'greeting form': function () {
            var rem = this.remote;
            return this.remote
                .get(require.toUrl('localhost:3000'))
                .setFindTimeout(5000)
                .execute(function() {
                        console.log("browser window object", window)
                        return Products.find({}).fetch().length
                    })
                .then(function (text) {
                    console.log(text)
                    assert.strictEqual(text, 2,
                        'Yes I can access Meteor and its Collections');
                });
        }
    });
});

Để biết thêm, đây là ý chính của tôi

Lưu ý: Tôi vẫn đang trong giai đoạn rất sớm với giải pháp này. Tôi không biết liệu tôi có thể thực hiện thử nghiệm phức tạp với cái này hay không. Nhưng tôi khá tự tin về nó.


0

Vận tốc chưa trưởng thành. Tôi đang gặp phải vấn đề setTimeout để sử dụng vận tốc. Để kiểm tra đơn vị phía máy chủ, bạn có thể sử dụng gói này .

Nó nhanh hơn vận tốc. Velocity đòi hỏi một thời gian rất lớn khi tôi kiểm tra bất kỳ thông số kỹ thuật nào bằng đăng nhập. Với mã Jasmine, chúng tôi có thể kiểm tra bất kỳ phương pháp và ấn phẩm phía máy chủ nào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.