Коллекция Mock Mon go в Jest - PullRequest
       4

Коллекция Mock Mon go в Jest

0 голосов
/ 20 января 2020

Я пытаюсь использовать заглушки Meteor Jest для модульного тестирования кода моего сервера, содержащего модули Meteor (используя jest), вместо того, чтобы вручную заглушать Meteor \ Mon go Использование БД в приложении, как объяснено здесь .

В ~\src\imports\api\collections.js У меня есть export const DomainCollection = new Mongo.Collection('domains');

В ~\src\imports\server\domainsService.test.js=>beforeEach методе, как я могу здесь высмеивать DomainCollection класс, чтобы он имел {domain: "domain1" ,_id:1}?

~ \ src \ import \ server \ domainsService.test. js:

'use strict';
import {check} from 'meteor/check';
import {Mongo} from 'meteor/mongo';
import {DomainCollection} from '../api/collections';
import domainsService from './domainsService';

**~\src\imports\server\domainsService.test.js**

describe('domainsService', () => 
{
  beforeEach(() => {
    //How can i mock DomainCollection class here so it has {domain: "domain1" ,_id:1}
  }),
  test.only('doesDomainExist1', () => 
  {
    expect(domainsService.doesDomainExist("domain1")).toBe(true);
  }); 
  test.only('doesDomainExist2', () => 
  {
    expect(domainsService.doesDomainExist("domain2")).toBe(false);
  }); 
})

~ \ src \ imports \ server \ domainsService. js

'use strict';
import { check } from 'meteor/check';
import { Mongo } from 'meteor/mongo';
import { UserCollection,UserDomainCollection,DomainCollection } from '../api/collections';
import { MeteorErrors, StateVariables, SecureRoutes, NonEmptyString} from '../api/constants';

export const domainsService = 
{
  doesDomainExist(domain) 
  {
    check(domain, NonEmptyString);    
    domain=domain.toString().toLowerCase(); 
    let domainExist= DomainCollection.find({"domain":domain}, {_id: 1}).count()>0?true:false; 
    return domainExist;
  },
}

~ \ src \ import \ api \ collection. js

import { Mongo } from 'meteor/mongo';
import { Meteor } from 'meteor/meteor';
import SimpleSchema from 'simpl-schema';
export const DomainCollection = new Mongo.Collection('domains');

упаковка. json:

{
  "name": "vue-meteor-demo",
  "private": true,
  "scripts": {
    "test": "jest src/imports/server --coverage"
  },
  "jest": {
    "collectCoverage": true,
    "coverageReporters": [
      "html"
    ]
  },
  "dependencies": {
    "@babel/runtime": "^7.7.4",
    "@riophae/vue-treeselect": "^0.4.0",
    "@syncfusion/ej2-vue-grids": "^17.4.40",
    "@syncfusion/ej2-vue-navigations": "^17.4.39",
    "aws-sdk": "^2.556.0",
    "babel-jest": "^24.9.0",
    "bcrypt": "^3.0.6",
    "bootstrap": "^4.4.1",
    "core-js": "^3.3.2",
    "cross-env": "^6.0.3",
    "faker": "^4.1.0",
    "generate-password": "^1.4.2",
    "graphql": "^14.5.8",
    "graphql-tag": "^2.10.1",
    "intersection-observer": "^0.6.0",
    "isomorphic-fetch": "^2.2.1",
    "jest-cli": "^23.6.0",
    "marker-clusterer-plus": "^2.1.4",
    "meteor-jest-stubs": "^2.1.0",
    "meteor-node-stubs": "^1.0.0",
    "moment": "^2.24.0",
    "papaparse": "^5.1.1",
    "pug": "^2.0.4",
    "simpl-schema": "^1.5.6",
    "vue": "^2.5.21",
    "vue-googlemaps": "^0.1.2",
    "vue-meteor-tracker": "^2.0.0-beta.5",
    "vue-observe-visibility": "^0.4.6",
    "vue-router": "^3.1.3",
    "vue-supply": "^0.3.0",
    "vuelidate": "^0.7.4",
    "vuex": "^3.1.2",
    "vuex-router-sync": "^5.0.0",
    "winston": "^3.2.1",
    "winston-loggly-bulk": "^3.0.1"
  },
  "devDependencies": {
    "@types/meteor": "^1.4.37",
    "@types/mocha": "^5.2.7",
    "@types/node": "^12.12.21",
    "@types/underscore": "^1.9.4",
    "babel-helper-vue-jsx-merge-props": "^2.0.3",
    "babel-plugin-syntax-jsx": "^6.18.0",
    "babel-plugin-transform-vue-jsx": "^3.7.0",
    "babel-preset-es2015": "^6.24.1",
    "chai": "^4.2.0",
    "cypress": "^3.8.2",
    "jest": "^24.9.0",
    "meteor-typings": "^1.4.1",
    "sinon": "^7.5.0",
    "start-server-and-test": "^1.10.6",
    "ts-node": "^8.5.4",
    "tslint": "^5.20.1",
    "typescript": "^3.7.4",
    "vue-template-compiler": "2.6.10"
  }
}

~ \ jest.config. js:

module.exports = {
  transform: {
    '^.+\\.jsx?
```: 'babel-jest',
  },
  moduleFileExtensions: [
    'js',
    'jsx',
  ],
  modulePaths: [
    '<rootDir>/node_modules/',
    '<rootDir>/node_modules/meteor-jest-stubs/lib/',
  ],
  moduleNameMapper: {
    '^(.*):(.*)
```: '$1_$2',
  },
  unmockedModulePathPatterns: [
    '/^imports\\/.*\\.jsx?$/',
    '/^node_modules/',
  ],
};
...