2017-10-03 3 views
1

Karma/Mocha 및 Chai의 단위 테스트에서 Chai 플러그인을 사용할 수 있어야합니까? 아니면 특별한 karma 호환 플러그인으로 변환해야합니까?카르마/모카/차이 (Chai-date-string)와 같은 차이 (Chai) 플러그인을 어떻게 사용합니까?

chai-date-string을 사용하여 expect(requestBody.time).to.be.a.dateString();과 같은 작업을하고 싶지만 NPM 모듈로 설치하여 테스트 파일에 필요로하는 행운이 없었습니다.

karma-chai-plugins 나는 다른 chai 플러그인 (심지어 번들로 제공되는 것 이상)을 사용하도록 설계되었지만 NPM 모듈로 추가 한 다음 프레임 워크에 Chai 플러그인 이름을 추가한다고 생각했습니다 목록,하지만이 작동하지 않았다.

karma.conf.js :

"devDependencies": { 
    "browserify": "^14.4.0", 
    "chai": "^4.1.2", 
    "chai-as-promised": "^7.1.1", 
    "chai-date-string": "^0.1.0", 
    "karma": "^1.7.1", 
    "karma-beep-reporter": "^0.1.4", 
    "karma-browserify": "^5.1.1", 
    "karma-chai-plugins": "^0.9.0", 
    "karma-chrome-launcher": "^2.2.0", 
    "karma-cli": "^1.0.1", 
    "karma-mocha": "^1.3.0", 
    "karma-mocha-reporter": "^2.2.4", 
    "karma-sinon-chai": "^1.3.2", 
    "mocha": "^3.5.3", 
    "sinon": "^2.4.1", 
    "sinon-chai": "^2.14.0", 
    "uglifyjs": "^2.4.11", 
    "url": "^0.11.0", 
    "watchify": "^3.9.0" 
    } 

결과 다음과 같은 오류가 : package.json에서

module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['mocha', 'chai', 'chai-date-string', 'sinon-chai', 'browserify'], 
    client: { chai: { includeStack: true } }, 
    files: [ 'playmob.js', 'test/**/*_test.js' ], 
    preprocessors: { 
     'test/**/*.js': [ 'browserify' ] 
    }, 
    browserify: { 
     debug: true, 
    }, 
    exclude: [ ], 
    reporters: ['mocha', 'beep'], 
    mochaReporter: { ignoreSkipped: true }, 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: true, 
    browsers: ['ChromeHeadless'], 
    singleRun: false, 
    concurrency: Infinity 
    }) 
} 

버전 (I 명시 적으로 의존성 문제를 해결하기 위해 chai-as-promised의 최신 버전을 설치했다)

> [email protected] test /Users/jschuur/Code/Playmob/js_api_lib 
> karma start 

/Users/jschuur/Code/Playmob/js_api_lib/node_modules/di/lib/injector.js:9 
     throw error('No provider for "' + name + '"!'); 
    ^

Error: No provider for "framework:chai-date-string"! (Resolving: framework:chai-date-string) 
    at error (/Users/jschuur/Code/Playmob/js_api_lib/node_modules/di/lib/injector.js:22:12) 

답변

1

karma-chai-plugins 코드를 보니 일련 번호 hardcoded plugin names이 있습니다. karma-chai-plugins은 소스에 하드 코딩 된 Chai 플러그인 만 인식합니다. 그래서 chai-date-string에 사용할 수 있다고 생각하지 않습니다.

또한 chai-date-string은 브라우저에서 쉽게로드 할 수있는 형식으로 배포되지 않습니다. 당신은 Browserify 또는 Webpack을 사용하여 chaiDateString과 같은 것을 글로벌 공간에 내보내는 파일로 변환 할 수 있습니다.

  1. files 변환 된 chai-date-string 스크립트에 포함 : 그럼 당신은해야 할 것이다.

  2. chai.use(chaiDateString)을 호출하는 files에 다른 스크립트를 추가하십시오. repo에 표시된 example codechai.use에 대한 호출을 생략하지만 생략 할 수 없습니다.

+0

내 설정은 이미 browserify를 사용하고 있으며, 실제로 다른 테스트에서'karma.conf.js' 어딘가에 설정하지 않고'url' 모듈을 사용하므로 훨씬 더 확신하지 못했습니다 설치가 필요할 것입니다. 당신의 추천을 거쳤고, playmob_test.js 파일의 상단에'chai.use (chaiDateString);'을 덧붙이려고 시도 했었고'node_modules/chai-date-string/index.js ''내 '파일'블록에 있지만 행운은 없습니다. 나는 여전히 같은 오류가 발생합니다. –

+1

'frameworks' 설정에서 여전히'chai-date-string'을 사용하고 있기 때문에 * 같은 * 오류가 발생한다면. 거기에서 제거해야합니다. (이것은 첫 번째 단락에서 암시 한 것입니다. 왜냐하면'frameworks에있을 수있는 유일한 것은'karma-chai-plugins '이지만 사용할 수 없기 때문입니다.) 그리고 네, browserify를 사용하고 있습니다. 이미 테스트 파일에'var chaiDateString = require ("chai-date-string")'을 사용하고 각 테스트 파일에'chai.use (chaiDateString)'을 넣으면 이미 가지고있는 설정을 사용할 수있을 것입니다. – Louis

+1

그러나 모든 테스트 파일에서'require '하지 않고'chai-date-string'을 한 번 설정하고 싶다면'karma.conf.js'에있는 Browserify 설정에 의존 할 수 없습니다. 테스트 파일과는 별도로'chai-date-string'을 다루어야 할 것입니다.나는 Karma에서 Browserify를 사용하지 않았으므로,이'karma.conf.js '에 필요한 구성을 수행 할 수 있는지 여부를 모르겠습니다. – Louis

관련 문제