Node.jsでユニットテスト

Node.jsでユニットテストしてみます。
まずはNode.jsのインストールから。


■Node.jsのインストール(NVM使用)

$wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.18.0/install.sh | bash

環境変数を詠み込むため、Terminalを閉じてもう一度開く

$nvm ls-remote
$nvm install vX.X.X ※使用するバージョンを指定
$node -v


ユニットテストライブラリのインストール

$sudo apt-get install npm
$sudo npm install mocha
$sudo npm install power-assert
$sudo npm install nock
$sudo ln -s "$(which nodejs)" /usr/local/bin/node


■helloWorld.js

exports.greet = function() { 
	return "Hello World!!"; 
}


■helloWorldTest.js

var assert = require('assert');
var module = require('./helloWorld');
 
describe('greet', function () {
	it('戻り値が正しいこと', function () {
		assert.equal(module.greet(), 'Hello World!!');
	});
});


■http.js

var https = require('https');
var url = "https://www.google.co.jp";

exports.getData = function (done) {
	
	https.get(url, function (res) {
		
		var response = '';
		
		res.on('data', function (chunk) {
			response += chunk;
		});
		
		res.on('end', function () {
			console.log(response);
			done(null, response);
		});
	
	}).on('error', function (e) {
		console.log(e.message);
		done(e);
	});
}


■httpTest.js

var nock = require('nock');
var assert = require('power-assert');
var module = require('./http.js');

var url = 'https://www.google.co.jp';
var path = '/';

describe('HTTPレスポンスのMockテスト', function () {
	
	it('getDataのテスト', function (done) {
		
		// HTTPレスポンスのMock作成
		nock(url).get(path).reply(200, 'GoogleのHTML'); ※Mockで指定した値が返却される(Webサイトにアクセスしない)
		
		// テスト実行
		module.getData(function (err, response) {
			assert(response == 'GoogleのHTML');
			done();
		})
	});
});


ユニットテスト実行

$mocha helloWorldTest.js
$mocha httpTest.js

Dropboxの共有リンク

だいぶ前からDropboxのPublicフォルダが廃止になったので、画像リンク切れのまま放置していましたが・・・
共有リンクに張り替えました。


1)画像を右クリック→「Dropboxリンクをコピー」で共有リンクを作成
2)共有リンクURLを直リンクに修正

https://www.dropbox.com/s/dyb1yc7va32lt9f/head_logo_org.jpg?dl=0

https://dl.dropboxusercontent.com/s/dyb1yc7va32lt9f/head_logo_org.jpg


※末尾の「?dl=0」を削除
※「www.dropbox.com」を「dl.dropboxusercontent.com」に変更


後はひたすら記事上の画像リンクURLを共有リンクURLに修正。
数が多くて大変だった・・・

自宅開発環境のアップデート

自宅開発環境アップデートです。
今年も忘れずに、こまめにアップデートします。自分への覚書を残しておきます。


Hyper-V 引っ越し
Windows10からローカル環境でHyper-Vが起動できるようになったので、
Hyper-V Server2012で稼働していた仮想マシンをローカル環境に引っ越し。


Ubuntuアップデート→Ubuntu 16.04 LTS
VirtualBoxHyper-Vは共存できないため、VirtualBoxからHyper-Vに引っ越し。
デスクトップ左側のランチャーの1番上の「unity-dash」アイコンをクリック→「update」と入力→「ソフトウェアの更新」。


■Container Linux by CoreOSアップデート→stable 1576.4.0
下記コマンドでアップデート。

$sudo update_engine_client -update


■hosts→mDNSへ
IPアドレスの管理をhostsファイルで行っていたが、ルータ再起動とかでIPアドレスが変わると書換が必要で面倒だった。
WindowsBonjouruBuntuはavahi-daemon、CoreOSはavahi-daemonのDockerをインストールしてmDNSに変更。
DNSサーバを立てなくてもいいし、IPアドレスが変わっても「ホスト名.local」でアクセスできるので便利。

自宅開発環境のアップデート

自宅開発環境アップデートです。
今年も忘れずに、こまめにアップデートします。自分への覚書を残しておきます。


Ubuntuアップデート
VirtualBox上のEclipse等を詰め込んだ、Ubuntu開発環境をアップデート。
デスクトップ左側のランチャーの1番上の「unity-dash」アイコンをクリック→「update」と入力→「ソフトウェアの更新」で手動アップデートします。
Ubuntu15.10→16.04にアップグレード。特に問題なく終了。


Hyper-V Serverアップデート
Hyper-V ServerのWindows Updateを実行。特に問題なく終了。
Hyper-V上のCoreOSは、下記コマンドで899.15.0→1185.5.0にアップデート。特に問題なく終了。

$sudo systemctl unmask update-engine.service
$sudo systemctl start update-engine.service
$update_engine_client -check_for_update
$sudo update_engine_client -update

ラズベリーパイ ゼロを個人輸入してみた

今更ながら、ラズベリーパイ ゼロを個人輸入してみました。
日本では正式に販売していないそうです。
Amazonで、個人輸入したのが売ってますけど。


海外サイトの在庫は、下記URLで確認できます。
最近は、供給が安定してきたのか、在庫切れになる事が少なくなってきました。
http://whereismypizero.com/


pimoroniで購入してみました。
Raspberry Pi Zeroの購入は一人一個までの購入制限があります。
送料が一番安い「international Standard」を選択して、合計で1200円程でした。


ですが… 一ヶ月経っても、届きません…
どうやら、住所の記入方法を間違えてしまったようです。
ラッキング番号もないので、問い合わせもできません…しまった。


今度は、住所の記入方法を間違えないように注意して…
送料が3000円とすごく高いですが、トラッキング番号付きで一番早く送ってくれる「UPS Saver」で、
注文してみたところ、5日で届きました。はやい。


ラッキングも詳細でした。
United Kingdom
 →Sheffield, United Kingdom
 →Castle Donnington, United Kingdom
 →Koeln, Germany
 →Shenzhen, China
 →Osaka, Japan


イギリスから、ドイツのケルン空港と中国の深セン空港を経由して、関西空港に着いてました。
ケルン空港と深セン空港に、UPSアメリカの運送業者)のハブ空港があるみたいで、ココを経由するみたいですね。
また、関西空港に着いてからは、日本のクロネコヤマトが配送していました。


ちなみに、UPSは土日配送しないそうです。
今回、土日を含んでいたので、5日かかりましたが、
土日含まなければ、3-4日で届きそうです。送料高いですけど。


届く事がわかったので…
今度は、トラッキング番号付きで一番安い、「Royal Mail Tracked & Signed」で再度、注文してみました。
届くのに、1-2週間くらいかかりそうですが・・・


ラズベリーパイ ゼロのケース×2
ラズベリーパイのカメラ×1
ラズベリーパイ ゼロ×1
で、送料込みで5000円くらいでした。
日本で買ったら、総額8000円くらいですかね。ちょっとお安く購入できます。


ちなみに、16,000円以内の買い物であれば、関税はかからないそうです。
来年になったら、そろそろ日本での発売も開始すると思うので、
スイッチサイエンスさんや秋月電子さんで購入できるようになるといいですね。

MonacaでiOSアプリを作ってみる

Monacaで、iOSアプリを作成してみます。


Monaca - HTML5ハイブリッドアプリ開発プラットフォーム
https://ja.monaca.io/


HTML5JavaScriptで、スマートフォンアプリ(iOSAndroidWindows)が作成できます。
国産ツールなので、ドキュメントが日本語でわかりやすいです。
無料アカウントでも、アプリが作成できますので、早速、試してみました。


Monacaクラウドを使用すれば、ブラウザ上で開発できますので、ツールをインストールする必要もありません。


IoT調査で、リモコン遠隔操作と各種センサー値グラフ表示のクライアント部分を、HTML+JavaScript(Milkcocoa)で作成していました。
それをそのまま、Monacaに移植してみました。


iOS向けMonacaデバッガーをiPhoneにインストールして、表示してみます。
画面下部のタブバーで機能を切り替える事ができます。※タグを記載するだけで簡単に実装できました。


ここまで、無料アカウントでできました。Macも必要ありません。
アプリを配布するには、Appleデベロッパプログラムに参加する必要があります。(1万円くらいの年会費がかかります。Macは必要なのかな?)