gpt4 book ai didi

angular - 如何测试使用 moment 的 angular2 服务?

转载 作者:太空狗 更新时间:2023-10-29 18:30:25 25 4
gpt4 key购买 nike

我正在尝试测试我编写的使用 momentJS 的 Angular (angular2) 服务,但由于 moment 存在于浏览器中,我不断收到引用错误。无论如何告诉业力/ Jasmine 如何在单元测试中使用时刻?这是我得到的错误:

ReferenceError: Can't find variable: moment in karma-test-shim.js (line 33814)

这是我的测试:

describe('isDateBeforeToday', () => {
it('should return true if date is before today', () => {
let past = new Date(2016, 1, 1);
expect(UnitService.isDateBeforeToday(past)).toEqual(true);

past = new Date();
past.setDate(past.getDate() - 1);
past.setHours(23);
expect(UnitService.isDateBeforeToday(past)).toEqual(true);
});

it('should return false if date is today', () => {
let today = new Date();
expect(UnitService.isDateBeforeToday(today)).toEqual(false);
});

it('should return false if date is in future', () => {
let future = new Date();
future.setDate(future.getDate() + 1);
expect(UnitService.isDateBeforeToday(future)).toEqual(false);
});
});

这是我要测试的函数:

static isDateBeforeToday(date: Date) {
let momentDate = moment(date);
let now = moment();
return (momentDate.diff(now, 'days') < 0);
}

karma-test-shim.js(基于 Angular 示例):

Error.stackTraceLimit = Infinity;

require('core-js/es6');
require('core-js/es7/reflect');

require('zone.js/dist/zone');
require('zone.js/dist/long-stack-trace-zone');
require('zone.js/dist/proxy');
require('zone.js/dist/sync-test');
require('zone.js/dist/jasmine-patch');
require('zone.js/dist/async-test');
require('zone.js/dist/fake-async-test');

require('moment');

var appContext = require.context('../__tests__', true, /\.spec\.ts/);

appContext.keys().forEach(appContext);

var testing = require('@angular/core/testing');
var browser = require('@angular/platform-browser-dynamic/testing');

testing.TestBed.initTestEnvironment(browser.BrowserDynamicTestingModule, browser.platformBrowserDynamicTesting());

业力.conf.js:

var webpackConfig = require('./webpack.test');

module.exports = function (config) {
var _config = {
basePath: '',
browserNoActivityTimeout: 20000, // had to increase this for component unit tests to work

frameworks: ['jasmine'],

files: [
{pattern: './karma-test-shim.js', watched: false}
],

preprocessors: {
'./karma-test-shim.js': ['webpack', 'sourcemap']
},

webpack: webpackConfig,

webpackMiddleware: {
stats: 'errors-only'
},

webpackServer: {
noInfo: true
},

reporters: ['progress','kjhtml'], //leave coverage reporter in for now, even though coverage not working

coverageReporter: {
type: 'html',
dir: '../coverage/'
},

browsers: ['phantomJS_without_security'],
customLaunchers: {
chrome_without_security: {
base: 'Chrome',
flags: ['--disable-web-security']
},
phantomJS_without_security: {
base:'PhantomJS',
options: {
windowName: 'Portal-tests',
settings: {
webSecurityEnabled: false
}
}
}
},

phantomjsLauncher: {
// Have phantomjs exit if a ResourceError is encountered (useful if karma exits without killing phantom)
exitOnResourceError: true
},

client: {
captureConsole: true
},

port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: false,
singleRun: true
};

config.set(_config);
};

最佳答案

我最终做了一些非常骇人听闻的事情。我曾经需要从我的 node_modules 导入 moment 库,并将它附加到每个使用 moment 的测试类的 beforeEach 中的 window 对象。如果有人有更好的、不那么骇人听闻的答案,请张贴。

import { UnitService } from '../../src/app/services/unit.service';
let moment = require('moment');

describe('UnitService', () => {

beforeEach(() => {
(<any>window).moment = moment;
});

// Tests that use a function that uses moment go here

});

关于angular - 如何测试使用 moment 的 angular2 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47019617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com