用于确保正确性的前端框架:基于 Effect 构建,架构参考 Elm
The front end framework for correctness: built on Effect, architected like Elm

原始链接: https://foldkit.dev/

这段代码演示了如何使用 `foldkit` 测试状态驱动型应用,主要包含两种测试模式: 1. **`Story`(单元/逻辑测试):** 侧重于状态机。它验证特定事件是否触发了正确的模型转换和副作用(命令),从而确保业务逻辑在隔离状态下符合预期。 2. **`Scene`(集成/UI 测试):** 模拟视图中的用户交互。它验证端到端的流程(例如输入邮政编码并点击按钮),同时确认 UI 是否正确更新以反映加载状态和渲染后的天气数据。 这些抽象概念共同提供了一个强大的框架,用于测试内部模型逻辑和外部用户体验。

Hacker News 上的一场讨论重点介绍了 **foldkit.dev**。这是一个基于 Effect 构建的新型前端框架,其灵感源自 Elm 的架构,旨在将代码正确性置于首位。 尽管有用户质疑该项目缺乏实际应用经验,但讨论随后转向了 AI 代理时代下的软件开发未来。参与者认为,随着“代理编程”(agentic coding)的成熟,手动编码的传统负担将随之减轻。因此,重点应转向使用那些能从根本上减少错误的框架——正如 Rust 在安全性上优于 C++ 那样。 即便某个框架对人类编写者而言显得“冗长”或复杂,但如果是由 AI 代理来处理实现,这些特质就变得不再重要了。共识认为,优先考虑严格正确性和安全性的工具,正是编程未来的正确发展方向。
相关文章

原文
import { Scene, Story } from 'foldkit'
import { expect, test } from 'vitest'

// Story — test the state machine
test('fetch weather updates the model', () => {
  Story.story(
    update,
    Story.with(model),
    Story.message(SubmittedWeatherForm()),
    Story.model(model => {
      expect(model.weather._tag).toBe('WeatherLoading')
    }),
    Story.Command.expectExact(FetchWeather),
    Story.Command.resolve(FetchWeather, SucceededFetchWeather({ weather })),
    Story.model(model => {
      expect(model.weather._tag).toBe('WeatherSuccess')
    }),
  )
})

// Scene — test through the view
test('type a zip code, click get weather, see the forecast', () => {
  Scene.scene(
    { update, view },
    Scene.with(model),
    Scene.type(Scene.label('Zip code'), '90210'),
    Scene.click(Scene.role('button', { name: 'Get Weather' })),
    Scene.expect(Scene.role('button', { name: 'Loading...' })).toExist(),
    Scene.Command.expectExact(FetchWeather),
    Scene.Command.resolve(FetchWeather, SucceededFetchWeather({ weather })),
    Scene.inside(
      Scene.role('article'),
      Scene.expect(Scene.text('Beverly Hills, California')).toExist(),
      Scene.expect(Scene.text('72°F')).toExist(),
    ),
  )
})
联系我们 contact @ memedata.com