Run javascript es6 code in Jasmine

前端 未结 3 903
醉话见心
醉话见心 2021-01-13 08:05

I am exploring JavaScript es6 code in angularjs app and used grunt babel to compile the es6 to es5.

My unit test (jasmine) doesn\'t run with es6 code using phantomjs

3条回答
  •  感动是毒
    2021-01-13 08:37

    Here is a minimal setup example for Babel 7+, Jasmine 3.5.0, project structure:

    ☁  jasmine-examples [master] ⚡  tree -a -L 3 -I "node_modules|coverage|.git|.nyc_output"
    .
    ├── .babelrc
    ├── .editorconfig
    ├── .gitignore
    ├── .nycrc
    ├── .prettierrc
    ├── LICENSE
    ├── README.md
    ├── jasmine.json
    ├── package-lock.json
    ├── package.json
    └── src
        ├── helpers
        │   ├── console-reporter.js
        │   └── jsdom.js
        └── stackoverflow
            ├── 60138152
            ├── 61121812
            ├── 61277026
            ├── 61643544
            └── 61985831
    
    8 directories, 12 files
    

    devDependencies:

    "@babel/preset-env": "^7.9.6",
    "@babel/register": "^7.9.0",
    "jasmine": "^3.5.0",
    

    npm scripts:

    "scripts": {
      "test": "jasmine --config=./jasmine.json",
      "coverage": "nyc npm run test && nyc report --reporter=html"
    }
    

    jasmine.json:

    {
      "spec_dir": "src",
      "spec_files": ["**/?(*.)+(spec|test).[jt]s?(x)"],
      "helpers": ["helpers/**/*.js", "../node_modules/@babel/register/lib/node.js"],
      "stopSpecOnExpectationFailure": false,
      "random": true
    }
    

    .babelrc:

    {
      "presets": ["@babel/preset-env"]
    }
    

    Here we need to watch out that the file paths of helpers:

    Array of filepaths (and globs) relative to spec_dir to include before jasmine specs

    The file paths in the helpers option are relative to spec_dir, NOT relative project root path. Which means you should use

    "../node_modules/@babel/register/lib/node.js"
    

    NOT

    "./node_modules/@babel/register/lib/node.js"
    

    src/61985831/myClass.js:

    export class MyClass {
      constructor() {}
    }
    

    src/61985831/myClass.spec.js:

    import { MyClass } from './myClass';
    
    describe('my class', function () {
      var myClassInstance;
      beforeEach(function () {
        myClassInstance = new MyClass();
      });
    
      it('is an instance of MyClass', function () {
        expect(myClassInstance).toBeInstanceOf(MyClass);
      });
    });
    

    The outcome for the test:

    > jasmine-examples@1.0.0 test /Users/ldu020/workspace/github.com/mrdulin/jasmine-examples
    > jasmine --config=./jasmine.json "/Users/ldu020/workspace/github.com/mrdulin/jasmine-examples/src/stackoverflow/61985831/myClass.spec.js"
    
    
    Executing 1 defined specs...
    Running in random order... (seed: 66758)
    
    Test Suites & Specs:
    (node:57105) ExperimentalWarning: The fs.promises API is experimental
    
    1. my class
       ✔ is an instance of MyClass (4ms)
    
    >> Done!
    
    
    Summary:
    
    

提交回复
热议问题