2013-09-06 3 views
3

Jasmine 프레임 워크로 단위 테스트를 작성하고 있습니다.Grunt-Karma : Jasmine 테스트 파일의 Node.js fs-framework 사용

저는 재 스민 테스트 파일을 실행하는 데 Grunt 및 Karma를 사용합니다.

로컬 파일 시스템 (예 : example.xml)에 파일의 내용을로드하기 만하면됩니다.

var fs = require('fs'); 
var fileContent = fs.readFileSync("test/resources/example.xml").toString(); 
console.log(fileContent); 

이 내 재스민 파일 내 Gruntfile.js에서 잘 작동 심지어 내 karma.conf.js 파일에 있지만 :

는 내가이 작업을 수행 할 수 있습니다 생각했다. 내 TESTFILE은 다음과 같습니다

describe('Some tests', function() { 
    it('load xml file', function() { 
     var fs = require("fs"); 
     fileContent = fs.readFileSync("test/resources/example.xml").toString(); 
     console.log(fileContent); 
    }); 
}); 

내가 얻을 첫 번째 오류는 : 여기 RequireJS를 사용할 수없는 이유

'ReferenceError: require is not defined'. 

모르는, 내가 Gruntfiel.js에, 심지어에서 그것을 를 사용할 수 있기 때문에 karma.conf.js?!?!?

좋아하지만, 수동으로 karma.conf.js 파일의 파일 - 속성에 require.js를 추가 할 때, 다음 나는 다음과 같은 메시지가 얻을 : requirejs의 배열 구문으로

Module name "fs" has not been loaded yet for context: _. Use require([]) 

을, 아무 반응이 없습니다.

나는 카르마로 테스트 파일을 실행할 때 재스민의 Node.js 기능에 액세스 할 수 없다고 생각합니다. 따라서 Karma가 Node.js에서 실행될 때 Nodej의 'fs'프레임 워크에 액세스 할 수없는 이유는 무엇입니까?

모든 의견/조언을 환영합니다. 감사합니다. .

답변

0

여기서는 단위 테스트 지점을 놓치고 있습니다. 테스트 용으로 응용 프로그램 논리를 복사하고있는 것 같습니다. 이것은 단위 테스트의 포인트를 무효화합니다. 왜냐하면 그것은 무엇을하기로되어 있느냐는 테스트 스위트를 통해 기존 함수를 실행하고 fs가 XML 파일을로드 할 수 있는지 테스트하지 않기 때문입니다. 시나리오에서 XML 처리 코드가 소스 파일에서 변경되고 (그리고 버그가 도입 된 경우) 여전히 유닛 테스트를 통과하게됩니다.

단위 테스트는 많은 샘플 데이터를 통해 함수를 실행하여 깨지지 않도록하는 방법이라고 생각하십시오. 단순히 재스민 시험에서 다음 입력을 허용하도록 파일 리더를 설정 : 테스트중인 개체에 노출되어

describe('My XML reader', function() { 
    beforeEach(function() { 
     this.xmlreader = new XMLReader(); 
    }); 
    it('can load some xml', function() { 
     var xmldump = this.xmlreader.loadXML('inputFile.xml'); 
     expect(xmldump).toBeTruthy(); 
    }); 
}); 

시험 방법을. 너 자신을 위해 더 많은 일을하지 마라. :-)

8

karma - 클라이언트 측 JavaScript (브라우저에서 실행되는 자바 스크립트)의 테스트 러이지만 서버 부분에서 실행되는 node.js 코드를 테스트하려는 경우 테스트가 작동하지 않습니다. . 그래서 카르마는 서버 측 테스트를 실행할 수 없습니다. 다른 테스트 러너가 필요합니다 (예 : jasmine-node).

+0

당신은 백엔드에 대한 경험이 있기 때문에 내 영웅입니다. – pylover

1

이것은 Google 검색에서 처음 등장하기 때문에 비슷한 오류가 발생했지만 프로젝트에서 node.js 스타일의 코드를 사용하지 않았습니다. 오류가 발생했다는 사실은 내 세공 구성 요소 중 하나인데 의 전체 복사본은 노드를 포함하고 있습니다.js 스타일의 코드이고, 가지고있는 코드는

{ pattern: 'src/**/*.js', included: false }, 

이며 karma.conf.js에 있습니다.

그래서 불행히도 Karma는이 문제에 가장 적합한 디버깅 기능을 제공하지 않으므로 문제를 일으킨 파일을 알리지 않고 내 버릴 수 있습니다. 그 패턴을 개별 디렉토리로 찢어서 가해자를 찾아야했습니다.

어쨌든 설치시주의를 기울여야합니다. 프로젝트 디렉토리에 많은 코드가 포함되어있어 실제로 신경 쓸 필요가 없습니다.

관련 문제