অতিরিক্ত বিকল্প বা পরামিতি সহ মোচা পরীক্ষা করে


85

আমি আমার নোড.জেএস অ্যাপ্লিকেশনটির জন্য মোচা ব্যবহার করে পরীক্ষার কেস লিখছি। অতিরিক্ত ক্ষেত্রে ইনপুট বিকল্প বা প্যারামিটার হিসাবে পরীক্ষার ক্ষেত্রে একটি API কী প্রয়োজন। এপিআই কীটি ব্যক্তিগত, তাই আমি এটিকে সরাসরি পরীক্ষার ফাইলে অন্তর্ভুক্ত করতে চাই না কারণ সকলেই এটি গিটহাবে দেখতে পাবে। আমি জানি মোচার জন্য এখানে কিছু বিকল্প রয়েছে:

http://mochajs.org/#usage

তবে পরীক্ষকরা কমান্ডলাইনে পরীক্ষার জন্য তাদের নিজস্ব এপিআই কী নির্দিষ্ট করতে দেওয়ার জন্য কিছু পরামিতি অন্তর্ভুক্ত করা সম্ভব? যেমন:

./node_modules/mocha/bin/mocha test/*.js --key YOUR_KEY

উত্তর:


86

আমি মনে করি না মোচা নিজেই আপনার পরীক্ষাগুলিতে অতিরিক্ত পরামিতিগুলি সমর্থন করে তবে আপনি পরিবেশের ভেরিয়েবলগুলি ব্যবহার করতে পারেন:

env KEY=YOUR_KEY mocha test/*.js # assumes some sort of Unix-type OS.

এবং এগুলি আপনার পরীক্ষার ফাইলগুলিতে পড়ুন:

var key = process.env.KEY;

11
একাধিক পরামিতিগুলির জন্যenv KEY1=YOUR_KEY1 KEY2=YOUR_KEY2 mocha test
ফিলিইইইইইপ

2017 এ এটি এখন সম্ভব, নীচে আমার উত্তরটি দেখুন
danday74

4
@ danday74 সমস্যাটি সংবেদনশীল তথ্য ভাগ করছে না। আমি দেখতে পাচ্ছি না যে আপনার সমাধানটি এর চারপাশে কীভাবে কাজ করে, কারণ এর অর্থ হ'ল নির্দিষ্ট ফাইলগুলি এখনও চেক ইন করা যায় না the
রবার্টক্লেপ

30

সাবস্ট্যাক এবং ফ্ল্যাটারন থেকে এনকনফ দ্বারা আশাবাদী মডিউলটি একবার দেখুন । আমার প্রচুর পরীক্ষাগুলি বহিরাগত প্যারামিটারগুলির উপর নির্ভর করে এবং আশাবাদী এবং এনকনফ মডিউলগুলি একটি জসন ফাইল থেকে কনফিগারেশন বিকল্পগুলি লোড করা সহজ করে তোলে

আপনার পরীক্ষার কমান্ডে কনফিগারেশন.জসন ফাইলের পথে প্রবেশ করুন

পরীক্ষা আদেশ

mocha test/api-test.js --config=/path/to/config.json --reporter spec

api-test.js

var path = require('path')
var fs = require('fs')
var assert = require('assert')
var argv = require('optimist').demand('config').argv
var configFilePath = argv.config
assert.ok(fs.existsSync(configFilePath), 'config file not found at path: ' + configFilePath)
var config = require('nconf').env().argv().file({file: configFilePath})
var apiConfig = config.get('api')
var apiKey = apiConfig.key

config.json

{
  "api": {
    "key": "fooKey",
    "host": "example.com",
    "port": 9000
  }
}

বিকল্প

আমি সম্প্রতি ব্যবহৃত অন্য একটি প্যাটার্নটি হ'ল কনফিগার মডিউল। আপনি ./config/default.ymlনিয়মিত চলার ./config/test.ymlজন্য একটি ফাইল এবং পরীক্ষার জন্য একটি ফাইল নির্দিষ্ট করতে পারেন ।

আপনার পরীক্ষার স্যুটটি চালানোর সময়, NODE_ENV = পরীক্ষা এক্সপোর্ট করুন এবং কনফিগার মডিউলটি লোড হবে test.yml

আপনার কোডে কনফিগারেশন অবজেক্টে অ্যাক্সেস করা সহজ

var config = require('config')

// config now contains your actual configuration values as determined by the process.env.NODE_ENV
var apiKey = config.api.key

NODE_ENV = পরীক্ষা সেট করার একটি সহজ উপায় হ'ল মেকফিল দিয়ে আপনার পরীক্ষা চালানো। এর মাধ্যমে আপনার সমস্ত পরীক্ষা চালান make test। একটি একক পরীক্ষা চালানোmake one NAME=test/unit/sample-test.js

নমুনা মেকফিল

MOCHA?=node_modules/.bin/mocha
REPORTER?=spec
GROWL?=--growl
FLAGS=$(GROWL) --reporter $(REPORTER) --colors --bail

test:
        @NODE_ENV="test" \
        $(MOCHA) $(shell find test -name "*-test.js") $(FLAGS)

one:
        @NODE_ENV="test" \
        $(MOCHA) $(NAME) $(FLAGS)

unit:
        @NODE_ENV="test" \
        $(MOCHA) $(shell find test/unit -name "*-test.js") $(FLAGS)

integration:
        @NODE_ENV="test" \
        $(MOCHA) $(shell find test/integration -name "*-test.js") $(FLAGS)

acceptance:
        @NODE_ENV="test" \
        $(MOCHA) $(shell find test/acceptance -name "*-test.js") $(FLAGS)

.PHONY: test

28

এই থ্রেডে উল্লিখিত প্রক্রিয়া.আরজিভি [সূচক] পদ্ধতির অনুরূপ পরামিতিগুলি পাস করার অন্যতম সহজ উপায় হল এনপিএম কনফিগার ভেরিয়েবলগুলি। এটি আপনাকে ভেরিয়েবলের নামটি আরও পরিষ্কারভাবে দেখতে দেয়:

পরীক্ষা আদেশ:

npm --somevariable=myvalue run mytest

প্যাকেজ.জসন:

"scripts": {
"mytest": "mocha ./test.js" }

test.js

console.log(process.env.npm_config_somevariable) // should evaluate to "myvalue"

এই এনপিএম সুবিধাটি ব্যবহার করার কারণে এই সমাধানটি বেশ দুর্দান্ত বলে মনে হচ্ছে। আপনি কীভাবে মন্তব্য করতে পারেন আপনি কীভাবে এইভাবে কমান্ড লাইন থেকে একাধিক যুক্তি পাস করতে পারেন?
রোমান

@roman: আপনি চেষ্টা করেছি npm ---somevar=myval --anothervar = anotherVal run mytestসঙ্গে process.env.npm_config_somevarএবং process.env.npm_config_anothervar?
ব্রেট জমির

26

অন্যান্য উত্তরগুলি সীমিত যে তারা আপনার পরীক্ষার স্যুট চালানোর আগে কোড প্রয়োগ কার্যকর করে না। তারা কেবল পাসিং পরামিতি সমর্থন করে।

আপনার পরীক্ষার স্যুটটি কার্যকর করার আগে এই উত্তরটি কোড প্রয়োগকে সমর্থন করে এবং মোচা দ্বারা সম্পূর্ণ নথিভুক্ত

মোচা ডক্স: http://unitjs.com/guide/mocha.html#mocha-opts

./test/mocha.opts তৈরি করুন

--recursive
--reporter spec
--require ./server.bootstrap
--require ./test/test.bootstrap

./server.bootstrap.js তৈরি করুন

global.appRoot = require('app-root-path');
// any more server init code

./test/test.bootstrap.js তৈরি করুন

process.env.NODE_ENV='test';
// any more test specific init code

অবশেষে আপনার সার্ভার.জেজে:

require('./server.bootstrap');

সম্পন্ন!

সার্ভার বুটস্ট্র্যাপের কোডটি টেস্টিং এবং সার্ভার কার্যকর করার আগে (এনপিএম শুরু এবং এনপিএম পরীক্ষা) কার্যকর করা হবে

পরীক্ষার বুটস্ট্র্যাপের কোডটি কেবল পরীক্ষার আগেই কার্যকর করা হবে (এনপিএম পরীক্ষা)

এটির জন্য @ ডিডিয়ানফাবিয়ানকে ধন্যবাদ - ইউনিট পরীক্ষার রানগুলিতে বৈশ্বিক পরিবর্তনশীল কীভাবে সূচনা করবেন তা দেখুন ?


20

মোচার সাথে এটি করার কোনও সমর্থিত উপায় নেই। প্রস্তাবিত উপায় হ'ল কোনও ফাইল (উদাহরণস্বরূপ config.json) ব্যবহার করা, এটির প্রয়োজন হয় এবং অন্য লোকেরা এটি পরিবর্তন করতে দেয়।

বলা হচ্ছে, আপনি যদি কমান্ডলাইনটির শেষে (কী পরীক্ষার জন্য ফাইলটির পরে) আপনার কীটি পাস করেন এবং ব্যবহার করেন - এটি প্রক্রিয়া.আরজিভি ব্যবহার করে উপলব্ধ হওয়া উচিত (যদি আপনি ব্যবহার না করেন - বা এটি কোনও নিয়মিত ফাইলের পরে নয়) নাম, তবে মোচা ব্যর্থ হবে)।

যদি আপনি চালনা করেন ./node_modules/mocha/bin/mocha --reporter spec test.js --apiKey=someKeyএবং টেস্ট.জেজেসে কোডটি থাকে:

var assert = require("assert")
describe("testy", function () {
    it("shouldy", function (done) {
        var value;
        for (var index in process.argv) {
            var str = process.argv[index];
            if (str.indexOf("--apiKey") == 0) {
                value = str.substr(9);
            }
        }
        assert.equal(value,"someKey")
        done();
    })
})

পরীক্ষা পাস করা উচিত


15

আপনি 'মিনিমিস্ট' মডিউলটি ব্যবহার করে মোচা পরীক্ষা স্ক্রিপ্টে একটি যুক্তি পাস করতে পারেন। সাথে ইনস্টল করুনnpm install minimist

টার্মিনাল:

mocha test.js --config=VALUE

মোচা নোড লিপি:

var argv = require('minimist')(process.argv.slice(2));
console.log('config', argv.config);

6

একটি সহজ উপায়, প্রসেস.আরজিভি ব্যবহার করে যাতে কমান্ড লাইন আর্টস থাকে

$ mocha  -w test/*.js --KEY=YOUR_VALUE

পরে, আপনি YOUR_VALUEআপনার কোড পেতে পারেন :

let LAST_PARAM = process.argv[process.argv.length-1]

let PARAM_NAME  = LAST_PARAM.split("=")[0].replace("--","")
let PARAM_VALUE = LAST_PARAM.split("=")[1]

console.log("KEY: ", PARAM_VALUE)

সব দেখতে process.argv:

process.argv.forEach((value, index) => {
        console.log(`process.argv[${index}]: ${value}`);
})

আউটপুট:

$ mocha  -w test/*.js --KEY=YOUR_VALUE

KEY:  YOUR_VALUE
process.argv[0]: /usr/local/bin/node
process.argv[1]: /Users/pabloin/.npm-packages/lib/node_modules/mocha/bin/_mocha
process.argv[2]: -w
process.argv[3]: test/tt.js
process.argv[4]: test/tt2.js
process.argv[5]: --KEY=YOUR_VALUE

KEY:  YOUR_VALUE
process.argv[0]: /usr/local/bin/node
process.argv[1]: /Users/pabloin/.npm-packages/lib/node_modules/mocha/bin/_mocha
process.argv[2]: -w
process.argv[3]: test/tt.js
process.argv[4]: test/tt2.js
process.argv[5]: --KEY=YOUR_VALUE

4
আপনি যদি এর mocha -w test/*.js --KEY=YOUR_VALUEপরিবর্তে ফোন করেন তবে এখানকার লোকদের পক্ষে বোঝা কি সহজ হবে না --KEY=YOUR_KEY?
ndvww

3

আমি প্যারামিটার চিন্তার মোচস্ট্রিমটি প্রেরণ করতে পারি (প্রয়োজন ('স্প্যান-মোচা-সমান্তরাল') m মোচস্ট্রিম)।

পছন্দ:

var mochaStream = require('spawn-mocha-parallel').mochaStream;

var mocha = mochaStream({
    env: function(){
        return {yourParam: 'value'}
    }
});

return gulp.src('test/**/*-specs.js', {read: false})
    .pipe(mochaStream)
    .on('error', console.warn.bind(console));

ভিতরে ..spec.js ফাইল

var yourParam = process.env.yourParam;

2

আমি বেশ কয়েকটি উত্তর পড়ছি, সেগুলির বেশিরভাগই আসল সমাধানের চেয়ে জটিল।

ধরা যাক আমার আছে config.ymlবা আছে config.json। আমার ক্ষেত্রে এটি একটি ওয়াইএএমএল ফাইল।

সবার আগে আমি yamljsনির্ভরতা ইনস্টল করি । এটি একটি ফাংশন বলা হয় load

মূলত আমি যা করি:

const YAML = require('yamljs'); const ymlConfig = YAML.load('./config.yml');

তারপরে আমি যাব:

process.env.setting1 = ymlConfig.setting1; process.env.setting2 = ymlConfig.setting2;

এবং অবশ্যই - এটি সব আপনার পরীক্ষার ফাইলে সম্পন্ন হয়েছে।


0

আপনি যদি মোচা সাইডবার (ভিএস কোড এক্সটেনশন) দিয়ে ডিবাগিং / পরীক্ষা করছেন তবে কেবল এটি লিখুন:

{
    "mocha.env": {
        "KEY": "YOUR_KEY",
        "MY_VARIABLE": "MY VALUE"
    }
}

at .vscode/settings.json


এই সমাধানটি একটি নির্দিষ্ট সরঞ্জামের সাথে খুব বেশি আবদ্ধ।
ম্যাটিএসজি

হ্যাঁ, আমি অনুমান করি যে আমি স্পষ্ট যখন উত্তর শুরুতে শর্তযুক্ত রাখি, আমি কেবল মূল রেফারেন্স সম্পর্কে পরিপূরক / অন্যান্য বিকল্প দিচ্ছি। :)
fsilva
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.