Meteor 테스트 주도 개발 [닫기]


120

나는 유성에서 테스트 주도 개발을 수행하는 방법을 보지 못합니다.

문서 나 FAQ의 어느 곳에서도 언급되지 않았습니다. 나는 어떤 예나 그와 비슷한 것을 보지 못했습니다.

일부 패키지는 Tinytest를 사용하고 있습니다.

이에 대한 로드맵은 무엇인지 개발자의 응답이 필요합니다. 라인을 따라 뭔가 :

  • 가능, 문서 없음, 스스로 알아 내십시오.
  • meteor는 테스트 가능한 앱을 만들 수있는 방식으로 구축되지 않았습니다.
  • 이것은 계획된 기능입니다
  • 기타

4
아래에서 언급했듯이 xolv.io 블로그를 살펴보면 Meteor를 사용하여 적절한 Unit + End-to-end TDD를 수행하는 예가 있습니다.
Xolv.io 2013

질문의 어조로 볼 때 Meteor에서 상당히 많은 것을 놓친다는 인상을받은 것 같습니다. 어떤면에서 보면, mood.meteor.com에는 기존 JS 라이브러리를 즉시 사용할 수있는 형식으로 번들로 묶어 생각할 수있는 대부분의 작업을 수행 할 수있는 패키지가 있습니다. meteor.com, IMHO에서 더 많이 연결될 수 있습니다.
pipedreambomb

5
- 당신은 라이카 체크 아웃해야 arunoda.github.io/laika
Arunoda Susiripala

1
유성 테스트는 현재 엉망입니다. 업데이트는 trello.com/c/BQ3gu0no/12-official-testing-framework 를 참조하십시오 .
앤드류 마오

답변:


83

업데이트 3 : Meteor 1.3부터 ​​meteor에는 단위, 통합, 승인 및 부하 테스트에 대한 단계별 지침이 포함 된 테스트 가이드 가 포함되어 있습니다.

업데이트 2 : 2015 년 11 월 9 일부터 Velocity는 더 이상 유지되지 않습니다 . Xolv.io는 Chimp에 대한 노력을 집중 하고 있으며 Meteor Development Group은 공식 테스트 프레임 워크를 선택해야합니다 .

업데이트 : Velocity 는 0.8.1부터 Meteor의 공식 테스트 솔루션 입니다.


현재 Meteor를 사용한 자동 테스트에 대한 내용은 많지 않습니다. 나는 Meteor 커뮤니티가 공식 문서에서 무엇이든 설정하기 전에 모범 사례 테스트를 발전시키기를 기대합니다. 결국 Meteor는 이번 주에 0.5에 도달했으며 상황은 여전히 ​​빠르게 변하고 있습니다.

좋은 소식 : Meteor와 함께 Node.js 테스트 도구사용할 수 있습니다 .

Meteor 프로젝트의 경우 어설 션에 Chai 를 사용하여 Mocha로 단위 테스트를 실행 합니다. Chai의 전체 기능 세트가 필요하지 않은 경우 should.js를 대신 사용하는 것이 좋습니다 . Mocha로 통합 테스트를 작성할 수도 있지만 현재로서는 단위 테스트 만 있습니다.

Meteor가 테스트 실행을 시도하지 않도록 "tests"폴더에 테스트배치하십시오 .

Mocha는 CoffeeScript를 지원합니다 Meteor 프로젝트에서 제가 선택한 스크립팅 언어 인 . 다음 은 Mocha 테스트를 실행하기위한 작업 이 포함 된 샘플 Cakefile 입니다. Meteor에서 JS를 사용하는 경우 Makefile에 대한 명령을 자유롭게 조정하십시오.

Meteor 모델은 Mocha에 자신을 노출하기 위해 약간의 수정이 필요하며이를 위해서는 Node.js의 작동 방식에 대한 지식이 필요합니다. 각 Node.js 파일은 자체 범위 내에서 실행되는 것으로 생각하십시오. Meteor는 서로 다른 파일에있는 객체를 서로 자동으로 노출하지만 Mocha와 같은 일반 Node 응용 프로그램은이를 수행하지 않습니다. , 모카에 의해 우리의 모델을 테스트 할 수 있도록하기 위해 수출 다음 CoffeeScript 패턴으로 각 Meteor 모델을 .

# 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?

... 그리고 Mocha 테스트 상단에서 테스트 할 모델을 가져옵니다.

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

이를 통해 Meteor 프로젝트에서 단위 테스트를 작성하고 실행할 수 있습니다!


2
나는 이것을 시도했고 테스트중인 코드가 어떤 Meteor.whatever기능을 사용할 때 문제가 발생했습니다 . Meteor는 정의되지 않은 오류입니다. 이 문제를 해결하기 위해 Meteor를 명시 적으로 요구하는 방법이 있습니까?
Christian Schlensker 2013 년

2
Christian, 내 대답에 설명 된 접근 방식은 현재 Meteor 응용 프로그램의 전체 인스턴스를 실행하지 않기 때문에 불완전합니다. 결과적 Meteor으로 Meteor에 의해 노출 된 모델 종속성과 마찬가지로 객체에 액세스 할 수 없습니다. 이 프로세스를 개선하려면 Mocha 내에서 애플리케이션 환경을 인스턴스화하고 Meteor개체를 테스트에 노출 해야합니다. 좀 더 완전한 테스트 솔루션이 준비되면이 답변을 업데이트하겠습니다. 그동안 궁금한 점이나 개선 사항이 있으면 언제든지 저에게 연락해 주시기 바랍니다.
Blackcoat 2013 년

@ChristianSchlensker : 클라이언트 측에서 기능 / 단위 테스트를 위해 Mocha를 사용한다면 Meteor 객체를 사용할 수 있습니다. 아래 내 대답의 샘플 코드를 참조하십시오.
jerico

@jerico 예, 좋아 보이는데, 서버 측 클래스에서는 작동하지 않습니다. 또한 모든 단위 테스트에서 항상 mocha --watch를 실행하는 것을 좋아합니다. 그들은 매우 빠른 서버 측에서 실행되어 정말 좋은 테스트 피드백을 만듭니다.
Christian Schlensker 2013 년

1
유성에서 사용할 수 있습니다 1.3 테스트로, 참조 guide.meteor.com
bigmadwolf

44

Hi all checkout laika- 유성 http://arunoda.github.io/laika/에 대한 완전히 새로운 테스트 프레임 워크

서버와 클라이언트를 동시에 테스트 할 수 있습니다.

면책 조항 : 저는 라이카의 저자입니다.


안녕 Arunoda. Meteor를 위해 노력 해주셔서 감사합니다. 여기 StackOverflow에서 당신은 당신이 라이카 뒤에 있다는 면책 조항으로 지적해야합니다.
nalply

5
그렇게하는 방법입니까?
Arunoda Susiripala 2014

1
귀하의 협조에 감사드립니다.
nalply

14

이 질문에 이미 답변이 있음을 알고 있지만, 추가 답변의 형태로 더 많은 컨텍스트를 사용할 수 있다고 생각합니다.

저는 meteor 코어와 대기 용 패키지를 구현하여 meteor로 앱 개발과 패키지 개발을 해왔습니다 .

귀하의 질문은 실제로 세 부분으로 된 질문 인 것 같습니다.

  1. 전체 유성 테스트 스위트를 어떻게 실행합니까?
  2. 개별 스마트 패키지에 대한 테스트를 어떻게 작성하고 실행 합니까?
  3. 자신의 애플리케이션에 대한 테스트를 어떻게 작성하고 실행합니까?

그리고 어딘가에 보너스 질문이있을 수있는 것처럼 들립니다. 4. 1, 2, 3에 대한 지속적인 통합을 어떻게 구현할 수 있습니까?

저는이 모든 질문에 대한 확실한 답을 문서화하는 데 도움을주기 위해 유성 코어 팀 에서 Naomi Seyfer (@sixolet) 와 이야기하고 협력하기 시작했습니다 .

1과 2를 주소로하는 초기 풀 요청을 유성 코어에 제출했습니다 : https://github.com/meteor/meteor/pull/573 .

나는 또한 최근에이 질문에 대답했습니다. 유성 테스트를 어떻게 실행합니까?

나는 @Blackcoat가 위의 3에 확실히 대답했다고 생각합니다.

보너스에 관해서는, 적어도 자신의 앱에 대한 지속적인 통합을 위해 circleci.com 을 사용하는 것이 좋습니다 . 현재 @Blackcoat가 설명한 사용 사례를 지원합니다. @Blackcoat가 설명했듯이 mocha로 단위 테스트를 실행하기 위해 coffeescript로 작성된 테스트를 성공적으로 얻은 프로젝트가 있습니다.

유성 코어 및 스마트 패키지에 대한 지속적인 통합을 위해 Naomi Seyfer와 저는 circleci의 창립자와 채팅을 통해 가까운 시일 내에 멋진 구현을 얻을 수 있는지 확인하고 있습니다.


12

RTD는 이제 더 이상 사용되지 않으며 Meteor 1.0의 공식 테스트 프레임 워크 인 Velocity로 대체되었습니다. Velocity가 과도하게 개발되고 있기 때문에 문서는 여전히 비교적 새로운 것입니다. Velocity Github repo , Velocity 홈페이지The Meteor Testing Manual (유료 콘텐츠) 에서 더 많은 정보를 찾을 수 있습니다.

면책 조항 : 저는 Velocity의 핵심 팀원이자 책의 저자입니다.


rtd.xolv.io 에서 Meteor의 전체 테스트 프레임 워크 인 RTD를 확인하세요 . Jasmine / Mocha / custom을 지원하며 일반 JS와 커피 모두에서 작동합니다. 유닛 / 서버 / 클라이언트 커버리지를 결합한 테스트 커버리지도 포함됩니다.

그리고 여기에 예제 프로젝트

여기 Meteor를 사용한 단위 테스트를 설명하는 블로그

셀레늄 WebdriverJS 및 유성 이용한 E2E 수용 테스트 방법 여기를

도움이되기를 바랍니다. 면책 조항 : 저는 RTD의 저자입니다.


6

이 페이지를 많이 사용하고 모든 답변을 시도했지만 초심자부터는 상당히 혼란 스러웠습니다. 문제가 생기면 어떻게 고칠 지 당황했습니다.

이 솔루션은 아직 완전히 문서화되지 않은 경우 시작하기가 매우 간단하므로 TDD를 수행하고 싶지만 JavaScript에서 테스트가 작동하는 방식과 어떤 라이브러리가 무엇에 연결되는지 확실하지 않은 저와 같은 사람들에게 권장합니다.

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

참고로, 라우터 Atmosphere 패키지 를 사용하여 '/ tests'경로를 만들어 테스트 결과를 실행하고 표시해야한다는 사실을 발견했습니다. 앱이로드 될 때마다 앱이 복잡 해지는 것을 원하지 않았기 때문입니다.


1
meteor-mocha-webwith mocha-phantomjs를 사용 하여 테스트 및 CI를 자동화 할 수도 있습니다 . 우리가 사용하는 것입니다. 전체 공개-저는 meteor-mocha-web.
jagill 2013-04-25

6

tinytest의 사용법에 대해 다음과 같은 유용한 리소스를 살펴볼 수 있습니다.

  1. 기본 사항은이 스크린 캐스트에서 설명합니다. https://www.eventedmind.com/feed/meteor-testing-packages-with-tinytest

  2. 아이디어를 이해했다면 .NET 용 공개 API 문서가 필요 tinytest합니다. 현재로서는 tinytest패키지 소스의 끝에있는 유일한 문서 : https://github.com/meteor/meteor/tree/devel/packages/tinytest

  3. 또한 스크린 캐스트는에 대해 이야기 test-helpers하고 있습니다. 여기에서 사용 가능한 모든 도우미를 살펴볼 수 있습니다. https://github.com/meteor/meteor/tree/devel/packages/test-helpers 종종 각각 내부에 몇 가지 문서가 있습니다. 파일

  4. 유성 패키지의 기존 테스트를 파헤쳐 보면 많은 예제가 제공됩니다. 이 일을하는 한 가지 방법은 대한 검색을하는 것입니다 Tinytest.또는 test.유성의 소스 코드의 패키지 디렉토리에


5

테스트는 다가오는 1.3 릴리스에서 Meteor의 핵심 부분이됩니다. 초기 솔루션은 Mocha와 Chai를 기반으로합니다.

최소 실행 가능한 설계에 대한 원래의 논의는 여기에서 찾을 수 있으며 첫 번째 구현 의 세부 사항은 여기에서 찾을 수 있습니다 .

MDG는 여기 에서 찾을 수있는 테스트 위한 가이드 문서의 초기 뼈대를 생성했으며 여기몇 가지 예제 테스트가 있습니다 .

다음은 위 링크에서 게시 테스트의 예입니다.

  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

브라우저에서 Meteor + Mocha로 기능 / 통합 테스트를 하고 있습니다 . 다음과 같은 내용이 있습니다 (가독성을 높이기 위해 coffeescript에 있음).

클라이언트에서 ...

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()

... 그리고 서버에서 :

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

물론 동일한 방식으로 클라이언트 측 단위 테스트를 수행 할 수 있습니다 . 통합 테스트의 경우 모든 Meteor 인프라를 사용하는 것이 좋습니다.


BTW : DOM 요소를 기다리는이 솔루션 은 jQuery를 사용하여 Meteor 클라이언트에서 기능 테스트를 수행 할 때 유용합니다.
jerico


2

0.6.0 이후로 쉽게 사용할 수있게 된 또 다른 옵션은 패키지 외부에서 최소한의 코드로 앱을 부팅하여 로컬 스마트 패키지에서 전체 앱을 실행하는 것입니다 (아마도 앱의 기반이되는 특정 스마트 패키지를 호출 할 수 있음). 앱).

그런 다음 Meteor 앱 테스트에 적합한 Meteor의 Tinytest를 활용할 수 있습니다.


0

나는 xolvio : cucumber 및 velocity를 사용하여 테스트를 성공적으로 수행했습니다. 정말 잘 작동하고 지속적으로 실행되므로 테스트가 통과했는지 항상 확인할 수 있습니다.


0

Meteor + TheIntern

어떻게 든 TheIntern.js로 Meteor 애플리케이션을 테스트했습니다.

내 필요에 따라입니다. 그러나 여전히 누군가를 올바른 방향으로 이끌 수 있다고 생각하며이 문제를 해결하기 위해 내가 한 일을 공유하고 있습니다.

execute브라우저 window객체에 액세스 할 수있는 JS 코드를 실행할 수 있는 기능이 있습니다 Meteor.

실행 에 대해 더 알고 싶어

이것이 기능 테스트를test suite 찾는 방법입니다.

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');
                });
        }
    });
});

더 알기 위해 이것이 나의 요점

참고 :이 솔루션은 아직 초기 단계입니다. 이것으로 복잡한 테스트를 할 수 있을지 모르겠습니다. 그러나 나는 그것에 대해 꽤 확신합니다.


0

속도는 아직 성숙하지 않았습니다. 속도를 사용하기 위해 setTimeout 문제에 직면하고 있습니다. 서버 측 단위 테스트를 위해이 패키지를 사용할 수 있습니다 .

속도보다 빠릅니다. Velocity는 로그인으로 사양을 테스트 할 때 많은 시간이 필요합니다. Jasmine 코드를 사용하면 모든 서버 측 방법 및 게시를 테스트 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.