Podsumowanie: Grudzień 2024

Opublikowano: 31.12.2024 - tagi: Blog Podsumowanie Grudzień 2024

W grudniu opublikowałem 2 wpisy:


NodeJS:

  1. Co zrobić, aby działały ścieżki absolutne w Vitest?
  2. Jak pisać testy dla operacji na plikach z Vitest?

Przeczytałem 1 książkę:

  1. Na własne ryzyko — Nassim Nicholas Taleb

Przesłuchałem 4 audiobooki:

  1. Północna Droga. Trzy młode pieśni — Elżbieta Cherezińska
  2. Lot — Lynn Steger Strong
  3. Wyjście z cienia — Janusz A. Zajdel
  4. Miasteczko Twin Falls — Loreth Anne White

NodeJS: Jak pisać testy dla operacji na plikach z Vitest?

Opublikowano: 28.12.2024 - tagi: NodeJS JavaScript TypeScript Plik Zapis Odczyt Testowanie Testy Test Vitest

Testowanie plików

Pisanie testów, które mają sprawdzać kod operujący na plikach, może być problematyczne. Jednym ze sposobów może być użycie mocków. Na przykład chcesz sprawdzić wczytywanie pliku. Wystarczy, że stworzysz mocka dla funkcji, która wczytuje plik. Osobiście nie lubię takiego podejścia. Pisanie testów, w taki sposób za bardzo skupia się na szczegółach implementacyjnych. Utrzymanie takich testów staje się uciążliwe.

Jakie jest inne wyjście? Możemy skorzystać z biblioteki, która symuluje operacje na plikach. Wszystko to dzieje się nie na dysku, ale w pamięci RAM, więc mamy gwarancję, że nasze testy będą szybkie.

Jedną z takich bibliotek jest: memfs. Ma takie samo API jak standardowa biblioteka fs NodeJS.

Instalacja memfs

Odpal komendę:

npm i -D memfs

Konfiguracja Vitest

Zanim napiszemy test musimy skonfigurować Vitest, żeby podczas uruchamiania testów podmieniał bibliotekę fs na memfs.

Otwórz plik vitest.config.js i dodaj ten fragment:

import { defineConfig } from 'vite'
import path from 'path'

export default defineConfig({
    resolve: {
        alias: {
            'node:fs': path.resolve(__dirname, './node_modules/memfs'),
        },
    },
})

Dzięki temu kiedy Vitest napotka w testowanym kodzie import:

import fs from 'node:fs'

Podmieni to na bibliotekę memfs:

import { fs } from 'memfs';

Przykład użycia memfs

Plik: file.ts:

import fs from 'node:fs'

export function createFile(name: string, content: string): void {
    fs.writeFileSync(name, content);
}

Test: file.test.ts:

import { expect, test } from 'vitest';
import { fs } from 'memfs';
import { createFile } from './file';

test('should create a file', async () => {
    // given
    fs.mkdirSync('.', { recursive: true })
    const fileName = './test';
    createFile(fileName, 'Some content')

    // when
   const content = fs.readFileSync(fileName, 'utf8');

   // then
   expect(content).toEqual('Some content');
});

NodeJS: Co zrobić, aby działały ścieżki absolutne w Vitest?

Opublikowano: 24.12.2024 - tagi: Vitest JavaScript TypeScript Ścieżka Testowanie NodeJS Konfiguracja

Konfiguracja

Załóżmy, że mamy taką strukturę katalogów:

tsconfig.json
vitest.config.js
src
	index.ts
	calculator
		add.ts
		sub.ts
		index.ts

Tak wygląda konfiguracja pliku tsconfig.json:

{
	"compilerOptions": {
		...
		"baseUrl": ".",
		"paths": {
			"@/*": ["./src/*"]
		},
		"include": ["src"]
	}
}

Skupiłem się głównie na konfiguracji ścieżek absolutnych, resztę pominąłem.

Teraz pliki z kodem:

calculator/add.ts:

export function add(a, b): number {
	return a + b;
}

calculator/sub.ts:

export function sub(a, b): number {
	return a - b;
}

calculator/index.ts:

export * from './add'
export * from './sub'

index.ts:

import { add, sub } from '@/calculator'

const resultAdd = add(2, 2);
const resultSub = sub(2, 2);

console.log('resultAdd: ', resultAdd); // 4
console.log('resultSub: ', resultSub); // 0

Po uruchomieniu kodu wszystko działa prawidłowo. Napiszmy teraz test przy użyciu Vitest.

add.test.ts:

import { expect, test } from 'vitest'
import { add } from '@/calculator'

test('should add two numbers', () => {
    // given
    const a = 2;
    const b = 2;
    const expected = 4;

    // when
    const result = add(a, b);

    // then
    expect(result).toEqual(expected)
})

Po uruchomieniu testu okazuje się, że mamy problem!

Error: Failed to load url @/calculator (resolved id: @/calculator)

Jak sobie z tym poradzić?

Ścieżki absolutne w Vitest

Można to naprawić w łatwy sposób. Otwórz plik vitest.config.js i dodaj taki kod:

import { defineConfig } from 'vite'
import path from 'path'

export default defineConfig({
    resolve: {
        alias: {
            '@': path.resolve(__dirname, './src')
        },
    },
})

Linijka:

 '@': path.resolve(__dirname, './src')

Poinformuje Vitest, jak ma "czytać" ścieżki zaczynające się od @.

Po dodaniu konfiguracji test zostanie poprawnie uruchomiony.


Podsumowanie: Listopad 2024

Opublikowano: 30.11.2024 - tagi: Blog Podsumowanie Listopad 2024

W listopadzie opublikowałem 1 wpis:


Webstorm:

  1. Jak przywrócić klasyczny wygląd Webstorma?

Przeczytałem 1 książkę:

  1. Piękni lśniący ludzie — Michael Grothaus

Przesłuchałem 4 audiobooki:

  1. Chrzest ognia — Andrzej Sapkowski
  2. Północna Droga. Saga Sigrun — Elżbieta Cherezińska
  3. Północna Droga. Ja jestem Halderd — Elżbieta Cherezińska
  4. Północna Droga. Pasja według Einara — Elżbieta Cherezińska

Webstorm: Jak przywrócić klasyczny wygląd Webstorma?

Opublikowano: 02.11.2024 - tagi: Webstorm IDE Wygląd UI

Klasyczny UI

JetBrains wprowadziło do swoich produktów nowy interfejs użytkownika o nazwie: New UI.

A co jeśli wolisz poprzednią wersję UI? Jest na to sposób. Wystarczy zainstalować plugin: Classic UI.

  1. Przejdź do ustawień: File -> Settings lub użyj skrótu klawiszowego: CTRL + ALT + S.
  2. Przejdź do Plugins.
  3. Za pomocą wyszukiwarki znajdź plugin o nazwie: Classic UI i zainstaluj.