В Svelte с Vitest есть способ имитировать значение браузера в $app/environment

Похоже, должен быть способ изменить значение browser. Машинописный текст не позволяет присваивать значения, например browser = true;, что приводит к ошибке: Cannot assign to 'browser' because it is an import.ts(2632)

пользователи.test.ts

import { describe, it, expect } from "vitest";
import { isAdmin } from "./users";


describe('isAdmin', () => {
    it('should throw an error when called on the client side', () => {
        expect(() => isAdmin("")).toThrowError('isAdmin should not be called on the client side');
    });
    it('should not throw when called from server', () => {
        expect(() => isAdmin("")).not.toThrow();
    });
    
});

пользователи.ts

import { browser } from '$app/environment';

/**
 * System admin
 * @param userEmail 
 * @returns true if user is admin and can manage all events
 */
export const isAdmin = (userEmail: string) => {
    if (browser) {
        throw new Error('isAdmin should not be called on the client side');
    }
    //...
    return false;
}

🤔 А знаете ли вы, что...
С Svelte можно создавать однофайловые компоненты с расширением .svelte.


60
1

Ответ:

Решено

Похоже, ваша цель — запретить использование функции на клиенте. Вместо использования browser я бы использовал Серверные модули.