造城中·📚30 篇造城日记·📝最近更新:2026年07月11日
🧪

写给独立开发者的测试指南:没有QA怎么保证质量

没有QA、没有同事review,写错了用户就是QA。所以必须自己写测试——这是生存刚需。

水哥
2026-05-236 分钟阅读

一个人做开发,没有人给你测代码

我提交的代码,没有 QA 帮我回归,没有同事帮我 review。写错了,上线了,用户就是 QA。

所以我不得不自己写测试。不是"最佳实践",是"生存刚需"。

我的测试策略(不是大厂那套)

大厂要求覆盖率90%,但我一个人做50个平台,不可能每个都测到。我的原则是:

测什么:高风险 > 高频 > 高影响

优先级:
P0:支付、用户数据、登录 → 必须有测试
P1:核心业务逻辑(搜索、下单)→ 尽量有
P2:展示类页面 → 手动测就够了
P3:静态页面、配置 → 不用测

怎么测:够用就行

// 不是大厂的测试金字塔,是独立开发者的"够用测试"
describe('PaymentService', () => {
  it('支付成功应该创建订单', async () => {
    const order = await paymentService.processPayment({
      userId: 1,
      amount: 100,
      platform: 'mishimao',
    })
    expect(order.status).toBe('paid')
  })

  it('余额不足应该返回错误', async () => {
    await expect(
      paymentService.processPayment({ userId: 1, amount: 999999 })
    ).rejects.toThrow('余额不足')
  })

  it('重复支付不应该重复扣款', async () => {
    await paymentService.processPayment({ userId: 1, amount: 100, orderId: 'same' })
    await expect(
      paymentService.processPayment({ userId: 1, amount: 100, orderId: 'same' })
    ).rejects.toThrow('订单已支付')
  })
})

测试的 ROI

坦白说,我只有30%的代码有测试。但这30%覆盖了所有支付、登录、核心业务——这些如果出bug会直接丢钱或丢用户的模块。

另外70%的代码——展示页面、配置、边缘功能——我用 E2E 手动测一遍就够了。不是偷懒,是算账:一个展示页的 bug 最多让我收到一条差评,但支付 bug 会让我直接赔钱。

我的测试工具链

  • 单元测试:Jest
  • API 测试:Supertest + Jest
  • E2E:手动 + 上线前检查清单

写在最后

测试这件事,对于独立开发者来说,不是"要不要做"的问题,是"做多少"的问题。

不写测试的代码,就像没有刹车的三轮车——能跑,但你不敢快跑。

我现在的底线是:任何涉及钱的代码,必须先写测试再过。

相关文章