How to Load a File for Testing with Jasmine Node?

前端 未结 3 1446
-上瘾入骨i
-上瘾入骨i 2021-02-04 01:02

I have a simple JavaScript file, color.js, and a matching spec file, colorSpec.js.

color.js:

function Color()          


        
相关标签:
3条回答
  • 2021-02-04 01:13

    When using Jasmine Node, you'll want to export your object/function/class, in this case Color, as a node module. I like to try and make my modules work in both node or a browser, like so:

    Folder Structure:

    js
      - src/
          color.js
      - spec/
          colorSpec.js
    

    src/color.js

    /**
     * class Color
     *
     * @constructor
     */
    function Color(red, green, blue)
    {
        var current = [red, green, blue];
    
        this.getCurrent = function ()
        {
            return current;
        }
    }
    
    // Export node module.
    if ( typeof module !== 'undefined' && module.hasOwnProperty('exports') )
    {
        module.exports = Color;
    }
    

    spec/colorSpec.js

    var Color = require('../src/color.js');
    
    describe("Test the Color object", function() {
        var color = new Color(255, 255, 255);
    
        it('to verify that it can return a color.', function() {
            expect(color.getCurrent()).toContain(255);
        });
    });
    
    0 讨论(0)
  • 2021-02-04 01:19

    This is not how require works. Your color.js needs to define/export something. I will assume you use require.js here for sanity.

    color.js

    define('Color', function (require) {
      var Color = function () {};
      return Color;
    });
    

    Then in your spec:

    var Color = require('color.js');
    
    0 讨论(0)
  • 2021-02-04 01:21

    you could load your color.js in the colorSpec.js with a require(). I dont see how jasmine can guess all the dependencies without you telling jasmine what they are exactly in your spec file. Edit : A quick and dirty solution , but maybe there is something builtin Jasmine to do that :

    fs = require('fs')
    myCode = fs.readFileSync('./color.js','utf-8') // depends on the file encoding
    eval(myCode)
    

    then your class should be available with jasmine

    if you call require directly on your file i think you need to create a module and export it

    0 讨论(0)
提交回复
热议问题