Mocha tests with extra options or parameters

后端 未结 10 1956
一向
一向 2020-12-04 16:17

I am writing test cases for my Node.js application using Mocha. The test cases need an API key as an extra input option or parameter. The API key is private, so I don\'t wan

10条回答
  •  臣服心动
    2020-12-04 16:56

    Take a look at the optimist module by Substack and nconf from flatiron. A lot of my tests depend on external parameters and the optimist and nconf modules makes it easy to load configuration options from a json file

    In your test command pass the path to the config.json file

    test command

    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
      }
    }
    

    Alternative

    Another pattern I have been using recently is the config module. You can specify a ./config/default.yml file for running regularly and a ./config/test.yml file for tests.

    When running your test suite, export NODE_ENV=test and the config module will load test.yml

    In your code it is easy to access the configuration object

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

    An easy way to set NODE_ENV=test is by running your tests with a makefile. Run all your tests via make test. To run a single test execute make one NAME=test/unit/sample-test.js

    Sample makefile

    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
    

提交回复
热议问题