Creo que el problema es con las diferencias entre el uso de ES Modules vs Common JS Module vs Webpack, ¡pero he venido aquí para descubrir qué es lo que está mal!
Básicamente, tengo QUnit configurado y funcionando bien a través del navegador. Pero quiero agregarlo a nuestro proceso de prueba de línea de comando de desarrollo para que QUnit también se ejecute. Encontré QUnit CLI y fue fácil ponerlo en marcha.
Ejecuto mi archivo de prueba con npx qunit path/to/test/*.js
//Working test example running from cli. QUnit.module('math'); function add(a, b) { return a + b; } QUnit.test('add two numbers', assert => { assert.equal(add(1, 2), 3); }); Pero cuando quiero probar el código real de los archivos de nuestro proyecto, recibo errores como: SyntaxError: Cannot use import statement outside a module así que intenté cambiar el archivo a .mjs, que luego falla al import { Code } from '../code/Code.js'; ^^^^^^ SyntaxError: Named export 'Code' not found. The requested module '../code/Code.js' is a CommonJS module, which may not support all module.exports as named exports.
Idealmente, me gustaría que mi entorno de prueba siguiera un camino similar al de la visita al sitio web principal.
Otro problema que asumo es debido a webpack.
En webpack tenemos:
resolve: { alias: { '@': path.resolve( __dirname, 'code/files' ) }, }, Entonces, todos nuestros archivos, por ejemplo, se importan con import { CodeThing } from '@/somecode/CodeThing'; . ¿Hay alguna forma de hacer que webpack y QUnit funcionen juntos de manera amigable?
Ejemplo de código de prueba completo que quiero que ejecute QUnit:
import { CodeThing } from '@/somecode/CodeThing.js'; QUnit.module( 'CodeThing' ); QUnit.test( 'CodeThing.Round', function( assert ) { assert.ok( CodeThing.Round( 1.005, 2 ) === 1.01, 'CodeThing.Round(1.005, 2) === 1.01 -- Passed!' ); } ) ;Entonces CodeThing.js contiene código como:
import { MoreCode } from '@/code/MoreCode'; import { OtherCode} from '@/code/OtherCode'; export var CodeThing = function() { }; CodeThing.Round = function( int, decimal_places ) { //Code }; CodeThing.FuncTwo = function( param ) { //Code };