E2Eテストについて考えてみた
mmmuser
デロイト トーマツ ウェブサービス株式会社(DWS)公式ブログ
最近モンスターエナジーを箱買いしました。関口です。
今回は今年5月に正式版がリリースされたDenoに軽く触れてみた内容を記載したいと思います。
公式よりDenoをインストールしてください。
VSCodeやJetBrainsIDEではDeno用のプラグインが既に存在しますので、こちらも適宜導入してください。
今回はミドルウェアとしてoakを利用します。
Application
とRouter
をoakからインポートして、アプリケーションサーバーの作成とルートを設定します。
app.ts
import { Application } from 'https://deno.land/x/oak/mod.ts'
import router from './router.ts'
const env = Deno.env.toObject()
const HOST = env.HOST || '127.0.0.1'
const PORT = env.PORT || 7700
const app = new Application()
app.use(router.routes())
app.use(router.allowedMethods())
console.log(`Listening on port ${PORT} ...`)
await app.listen(`${HOST}:${PORT}`)
route.ts
import { Router }from 'https://deno.land/x/oak/mod.ts'
import { getBooks, getBook, addBook, updateBook, deleteBook } from './controller.ts'
const router = new Router()
router.get('/books', getBooks)
.get('/books/:isbn', getBook)
export default router
簡単なGetメソッドを作成します。
controller.ts
interface IBook {
isbn: string;
author: string;
title: string;
}
let books: Array<IBook> = [{
isbn: "1",
author: "Robin Wieruch",
title: "The Road to React",
},{
isbn: "2",
author: "Kyle Simpson",
title: "You Don't Know JS: Scope & Closures",
},{
isbn: "3",
author: "Andreas A. Antonopoulos",
title: "Mastering Bitcoin",
}]
export const getBooks = ({ response }: { response: any }) => {
response.body = books
}
Denoで書かれたアプリを起動します
$ deno run --allow-net --allow-env app.ts
Listening on port 7700 ...
http://localhost:7700/books
にアクセスすると、books
arrayが返されます。
お試しで単純な関数とそれに対応する対応するテストを作成します。
sample.ts
export const add = (a: number, b: number) => {
return a + b;
}
sample.test.ts
import { add } from "./sample.ts";
import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
Deno.test("it should add two numbers", () => {
assertEquals(add(1, 2), 3);
});
deno testコマンドでテストを実行できます
$ deno test --allow-net
running 1 tests
test it should add two numbers ... ok (8ms)
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Simple REST API with Deno
Your First Deno Server in 60 Lines
How To Write Spec Tests In Deno