Тестирование модели мангуста с кармой - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь выполнить простой тест кармы, который проверяет, обладает ли созданная модель всеми необходимыми свойствами.

Но когда я импортирую модель, я получаю сообщение об ошибке, что модель не является конструктором

test.ts

import { Person } from '../src/models/person.model';
import { expect } from 'chai';


    describe('Test', () => {

    it('should succeed', function (done) {
        console.log(Person) // Returns null;
        setTimeout(done, 1000)
    });

    it('should be invalid if email is empty', function (done) {
        let person = new Person({ firstName: 'test' });
        setTimeout(done, 1000)
        person.validate(function (err: any) {
            expect(err.errors.email).to.exist;
            done();
        });
    });
})

person.model.ts

import { Document, Model, model, Schema, Mongoose } from 'mongoose';

export interface PersonModel extends Document {
  _id: string;
  email: string;
  password: string;
  firstName: string;
  lastName: string;
  profileImage: string;
  aboutMe: string;
  city: string;
  dateOfBirth: Date;
  diagnoses: string;
  hobbies: string;
  isOnline: boolean;
  isAdmin: string;
  token: string;
  deActivatedAccount: boolean;
}

const PersonSchema = new Schema({
  email: {
    type: String, unique: true, required: 'Email can\'t be empty',
  },
  password: String,
  firstName: String,
  lastName: String,
  profileImage: String,
  aboutMe: String,
  city: String,
  dateOfBirth: Date,
  diagnoses: String,
  hobbies: String,
  isOnline: Boolean,
  isAdmin: String,
  token: String,
  deActivatedAccount: Boolean,
});

export const Person: Model<PersonModel> = model<PersonModel>(
  'Person',
  PersonSchema
);

webpack.test.config

const webpack = require('webpack');
const path = require('path');

module.exports = {
    devtool: 'inline-source-map',
    mode: 'development',
    resolve: {
        extensions: ['.js', '.ts']
    },
    module: {
        rules: [
            {
                test: /\.(js|jsx|tsx|ts)$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: [
                            '@babel/preset-env',
                            "@babel/preset-typescript"
                        ],
                        plugins: [
                            "@babel/proposal-class-properties",
                            "@babel/proposal-object-rest-spread"
                        ]
                    }
                }

            }
        ]
    },
    output: {
        // the output file name
        filename: 'index.js',
        path: path.resolve(__dirname, 'build'),
        library: "my-library",
        libraryTarget: "umd" // exposes and know when to use module.exports or exports.
    },
}

karma.conf

var webpackConfig = require('./webpack.test.config.js');
webpackConfig.entry = undefined;
webpackConfig.mode = "development";

module.exports = (config) => {
    config.set({
        browsers: ["ChromeHeadless"],
        frameworks: ["mocha", "chai"],
        plugins: [
            "karma-typescript",
            "karma-mocha",
            "karma-mocha-reporter",
            "karma-chai",
            "karma-webpack",
            "karma-chai-as-promised",
            "karma-chrome-launcher"
        ],
        reporters: ["mocha"],// mocha gives a nice summary of the results.
        files: [
            "src/test.ts"
        ],
        preprocessors: {
            "src/test.ts": ["webpack"]
        },
        webpack: webpackConfig,
    })
};

test.ts

При выполнении этого теста я получаю следующую ошибку: Ошибка типа: _src_models_person_model__WEBPACK_IMPORTED_MODULE_1 __. Person не является конструктором в контексте. (index.js: 52032: 18)

Может кто-нибудь помочь мне решить это? Если я запускаю его без импорта модели, первый тест завершается успешно. так что я думаю, что перенос TS и т. д. идет хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...