我在测试一些javascript代码时得到以下错误,从一个打字稿文件中转换而来.
这是错误:
Error: _mapAction2.default is not a constructor
Run Code Online (Sandbox Code Playgroud)
以下是导致错误的代码行:
var mapAction = new MapAction(MapActionType.POLYGONDRAGGED, []);
Run Code Online (Sandbox Code Playgroud)
这是原始的typescript -file map-action.ts:
import { IMapAction} from './imap-action';
import { MapActionType } from './map-action-type.enum';
import {LatLngLiteral} from 'angular2-google-maps/core';
export class MapAction implements IMapAction{
type: MapActionType;
paths: Array<LatLngLiteral>;
constructor(mapActionType: MapActionType, paths: Array<LatLngLiteral>){
this.type = mapActionType;
this.paths = paths;
}
public getType(): MapActionType{
return this.type;
}
public getPaths(): Array<LatLngLiteral>
{
return this.paths;
}
}
Run Code Online (Sandbox Code Playgroud)
这是转换后的.js文件map-action.js:
"use strict";
class MapAction {
constructor(mapActionType, paths) { …Run Code Online (Sandbox Code Playgroud) 所以ava带有内置的ES2015支持,适用于我的实际测试文件.但是,当我这样做的时候
import {newUser, createUser, login} from './helpers/user';
Run Code Online (Sandbox Code Playgroud)
我无法import在帮助文件中使用和导出,然后我得到:
Users/rowe/Code/fv/foxvision-api/test/api/helpers/user.js:1
(function (exports, require, module, __filename, __dirname) { import request from 'supertest';
SyntaxError: Unexpected token import
Run Code Online (Sandbox Code Playgroud)
我没有设置特定的babel配置,因为它开箱即用的测试文件.任何人都可以向我解释为什么帮助器依赖关系不会被babel转换?使用test/**/helpers甚至遵循ava惯例.
谢谢,罗宾
解
所以基于thangngoc89的解决方案,我做的工作是:
.babelrc内容:{
"presets": [
"es2015",
"stage-2"
],
"plugins": [
"espower",
"transform-runtime"
]
}
Run Code Online (Sandbox Code Playgroud)
package.json:"ava": {
"require": ["babel-register"],
"babel": "inherit"
}
Run Code Online (Sandbox Code Playgroud) 我正在运行一个名为“创建管理”的测试。测试会先创建admin,然后检查admin是否创建成功。
在脚本中,我有一部分代码我想等待 3 秒再继续,因为每当单击提交按钮时,网站在导航完成后需要花费 3 秒来刷新管理表(用户信息列表) 。有关更多信息,此刷新不是导航,因此我的“waitForNavigation()”不起作用。
因此,流程将是这样的:“填写表单”>“点击提交按钮”>“等待导航”>“重新加载用户表(3s)”。
如果我不等待3秒表刷新,测试将抛出错误,因为在表中找不到注册用户(我有其他脚本来查找用户)。
我正在使用 AVA + sinon 来构建我的单元测试。由于我需要 ES6 模块并且我不喜欢 babel,因此我在整个项目中使用 mjs 文件,包括测试文件。我使用“--experimental-modules”参数来启动我的项目,并在测试中使用“esm”包。以下是我的ava配置和测试代码。
"ava": {
"require": [
"esm"
],
"babel": false,
"extensions": [
"mjs"
]
},
// test.mjs
import test from 'ava';
import sinon from 'sinon';
import { receiver } from '../src/receiver';
import * as factory from '../src/factory';
test('pipeline get called', async t => {
const stub_factory = sinon.stub(factory, 'backbone_factory');
t.pass();
});
Run Code Online (Sandbox Code Playgroud)
但我收到错误消息:
TypeError {
message: 'ES Modules cannot be stubbed',
}
Run Code Online (Sandbox Code Playgroud)
如何在没有 babel 的情况下存根 ES6 模块?
在编写单元测试之后,我面临集成测试,其中包括针对数据库(rethinkdb)测试库.
每个测试用例必须彼此独立,并且每次测试后数据库都将被清除,这样它们就不会产生误报.
由于AVA架构是并行运行测试,我发现我无法以这种方式实现正面测试.例如:
test.beforeEach(async function(t) {
const users = t.context.users = await DB.models.User.save([
{name: 'jhon',username: 'doe'},
{name: 'fabri',username: 'fenos'},
{name: 'will',username: 'red'},
{name: 'smith',username: 'blue'},
{name: 'paul',username: 'orange'},
{name: 'tesla',username: 'ele'},
]);
t.context.tasks = await DB.models.Task.save([
{title: 'My task1', description: 'My duty1', assignee_id: _.sample(users).id},
{title: 'My task2', description: 'My duty2', assignee_id: _.sample(users).id},
{title: 'My task3', description: 'My duty3', assignee_id: _.sample(users).id},
]);
});
test.afterEach(async (t) => {
return await DB.clearDB();
});
Run Code Online (Sandbox Code Playgroud)
我被迫使用串行功能允许每个测试完成并以串行方式清除DB.
如果测试同时共享相同的数据,我的测试可能会更新或删除可能导致误报的数据.
如果我正在写的测试只是读取数据,我只是做直播,只是作为清洁的工作pre,并post在问题中提到的脚本#311 …
我正在尝试从AVA迁移到Jest.在AVA中,您可以设置环境中的ava.setup设置jsdom.例如,创建DOM结构并执行必要的polyfill(localStorage).
我如何在Jest中实现这一目标?目前,我正在使用beforeEach每个测试套件,这不是最好的解决方案.
提前致谢!
我按照文档使用ava创建了我的第一个测试,但它似乎无法正常运行。我收到以下错误。我尝试import 'babel-register';在文件顶部添加,它可以工作,但前提是我运行一个特定的测试文件。例如ava ./test/helpers/test_helper.js。ava虽然单独运行...导致下面的导入错误。有没有其他人知道如何解决这个问题?入门指南使用 ES6 导入,我不知道为什么我的不能正常工作。
(function (exports, require, module, __filename, __dirname) { import test from 'ava'; ^^^^^^ SyntaxError: Unexpected token import
测试.js
import test from 'ava';
test(t => {
t.deepEqual([1, 2], [1, 2]);
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用AVA和Avoriaz测试Vue.js组件的计算属性.我可以挂载组件并访问数据属性.
当我尝试访问计算属性时,该函数似乎没有该组件上的数据的范围.
computed: {
canAdd() {
return this.crew.firstName !== '' && this.crew.lastName !== '';
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是 Error: Cannot read property 'firstName' of undefined
测试文件:
import Vue from 'vue';
import { mount }
from 'avoriaz';
import test from 'ava';
import nextTick from 'p-immediate';
import ComputedPropTest from '../../../js/vue-components/computed_prop_test.vue';
Vue.config.productionTip = false;
test.only('Should handle computed properties', async(t) => {
const MOCK_PROPS_DATA = {
propsData: {
forwardTo: '/crew',
crew: {}
}
},
wrapper = mount(ComputedPropTest, MOCK_PROPS_DATA),
DATA = {
crew: {
firstName: 'Ryan',
lastName: …Run Code Online (Sandbox Code Playgroud) 我想nyc ava和babel所有人在一起好好相处.我有一个问题,async/await分支显示为未覆盖,所以这是有效的,我无法集成babel-plugin-istanbul插件进行测试.
我在项目中有两个文件,src/index.js和src/test.js.
{
"name": "example",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "ava",
"coverage": "NODE_ENV=test nyc npm run test",
"report": "nyc report --reporter=html",
"report:open": "open ./coverage/index.html",
"cover": "npm run coverage && npm run report && npm run report:open"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"babel-runtime": "^6.26.0",
"bluebird": "^3.5.0",
"lodash": "^4.17.4"
},
"devDependencies": {
"ava": "^0.22.0",
"babel-cli": "^6.26.0",
"babel-plugin-istanbul": "^4.1.4",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.6.0",
"babel-register": …Run Code Online (Sandbox Code Playgroud) 我有Frontend React + Webpack应用程序使用后端API.我的Webpack设置取决于window.location.origin属性,用于设置和部署过程.目前,我正在使用Karma testrunner并试图用AVA testrunner替换它.
我正在尝试将AVA 应用于webpack配方的这个单一条目设置我也将JSDOM应用为节点的dom模拟器.
一些测试捆绑在一起,使用该location.origin属性.在运行webpack && ava脚本期间会抛出错误:
var apiUrl = process.env.API_URL && process.env.NODE_ENV !== 'production' ? process.env.API_URL : location.origin;
ReferenceError: location is not defined
Run Code Online (Sandbox Code Playgroud)
Karma在浏览器引擎上运行并window.location.origin动态再现值.与AVA不同.运行测试时它不会运行任何类型的浏览器.我只能(据我所知)"模仿"浏览器环境jsdom,这就是我想要做的.但是问题链接location.origin不支持特定属性jsdom
任何人都可以跟踪我的解决方案,window.location.origin为AVA动态(环保)重现吗?我知道我可以将它保持不变并将其存储在.env每个环境中.但这是我想要缓解的另一项维护任务.
ava ×10
javascript ×6
jsdom ×2
testing ×2
avoriaz ×1
babel ×1
ecmascript-6 ×1
es6-modules ×1
istanbul ×1
jestjs ×1
node.js ×1
nyc ×1
playwright ×1
reactjs ×1
sinon ×1
typescript ×1
vue.js ×1
webpack ×1