Open4
DenoでBDDテストを書く時の注意
公式ドキュメント
Deno.test("should return 400 if request invalid", async () => {...})
とかするとdeno test --filter "400"
でフィルタリングできて便利
ただ、BDDでdescribe
, it
, beforeEach
とか使うとイマイチ調子が悪い。
- itでフィルタリングできない
- .onlyをつけると、テストは動くのだけど最後になぜか
error: Test failed because the "only" option was used
って表示される
BDDの関数たちは内部的にDeno.test
とかを使っているから、二つは等価ですよ的なExample, 等価じゃなくてよ?
describe("age", () => {
let user: User;
beforeEach(() => {
user = new User("Kyle");
});
afterEach(() => {
User.users.clear();
});
it("getAge", function () {
assertThrows(() => user.getAge(), Error, "Age unknown");
user.age = 18;
assertEquals(user.getAge(), 18);
});
it("setAge", function () {
user.setAge(18);
assertEquals(user.getAge(), 18);
});
});
Deno.test("User age", async (t) => {
const user = new User("Kyle");
await t.step("getAge", () => {
assertThrows(() => user.getAge(), Error, "Age unknown");
user.age = 18;
assertEquals(user.getAge(), 18);
});
await t.step("setAge", () => {
user.setAge(18);
assertEquals(user.getAge(), 18);
});
});
後者はageのテストが終わった時にUserがclearされてなくて環境が汚れちゃうのでは?
- フィルタリングしたいなら、副作用生まないように頑張って
Deno.test()
を使う - BDDを選択するなら、itレベルでのフィルタリングはできない