JS のテストデータの組み立てを immer でやる
Faker 使っても良いんだけど別にランダマイズしたくないしシンプルにしたいって時は immer を使っている。
code:typescript
import produce from 'immer'
import { changeName } from '../model'
import userJson from './fixtures/user.json'
describe('User/model/changeName', () => {
describe('ユーザーが凍結されている', () => {
const suspendedUser = produce(userJson, u => {
u.state = 'suspended'
})
it('更新できない', () => {
expect(() => changeName(suspendedUser, '新しい名前')).toThrow()
})
})
})
state だけを変えてテストしていることが明確になる。
ここでは fixture を json にしているけど、テスト内に書いちゃったほうがより明示されるのでそちらがお好みならそうするとよい。
code:typescript
import produce from 'immer'
import { changeName, User } from '../model'
const user: User = {
id: 1,
name: 'John Doe',
state: 'active',
}
describe('User/model/changeName', () => {
describe('ユーザーが凍結されている', () => {
const suspendedUser = produce(user, u => {
u.state = 'suspended'
})
it('更新できない', () => {
expect(() => changeName(suspendedUser, '新しい名前')).toThrow()
})
})
})