この記事のターゲット
- Nightwatch.js使い始め
- 正直Node.jsよくわからない
- Nightwatchから外部にhttpリクエストを出したい
- なんとなくrequestよりaxiosの方が名前がかっこいい
Nightwatch.jsとは
いわゆるE2E(end-to-end)テストフレームワーク。
ブラウザの操作とアサーションのメソッドをNode.jsで提供してくれる。
Nightwatch.jsの導入についてはこちら
WebアプリのUI自動化テストでNightwatch.jsを試す
axiosとは
JavaScriptのPromiseベースHTTP通信ライブラリ。
もちろんNode.jsでも動く。
Ajaxなどが簡単に実装できる。
本題
今回の想定ケースは以下の通り。
- ブラウザで特定サイトにアクセスする
- 画面から特定の文字列を取り出し、APIへのリクエストパラメータとする
- APIからの返り値を画面のフォームに入力する
axios
module.exports = {
'ログインテスト': (client) => {
client
//1. ブラウザで特定サイトにアクセスする
.url('__loginUrl__')
//2. 画面から特定の文字列を取り出し、APIへのリクエストパラメータとする
.getValue('__取得したパラメータ__', function(result) {
paramId = result.value;
//apiリクエスト関数
api(paramId, client);
})
//入力フォームにパラメータをセット
.setValue('input[name=user_id]', 'hogehoge')
.setValue('input[name=password]', 'fugafuga')
//画面遷移を待つ
.pause(3000)
.verify.containsText('body', 'ログイン成功')
.click('#logout > a')
//画面遷移を待つ
.pause(3000)
.verify.containsText('body', 'ログアウト成功')
.end()
}
}
function api(param, client) {
//axiosを読み込む
const axiosBase = require('axios');
//apiのベースURLを設定
const axios = axiosBase.create({
baseURL: '__apiBaseUrl__',
timeout: 100000,
headers: ''
});
//getでAPIを叩く
axios.get('__apiEndPoint__', {
params: {
user_id: userId,
password: Password,
param_id: paramId,
}
})
.then(function(response) {
console.log('SUCCESS!!');
//3. APIからの返り値を画面のフォームに入力する
client.setValue('input[name=param]', [response.data,client.Keys.ENTER])
})
.catch(function(error) {
console.log('ERROR!!');
});
}
所感
axios、名前かっこいいですよね。