Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

自動テストって意識高そうで恰好良いですよね! 普段ブラウザ用のJavaScriptしか書かない人なのですが、テストについて調べても、難しい話から始まる記事ばかりで「アサーションって何?」とか「何で通常のファイルとは別のjsが必要なの?」みたいな気持でした。この記事では簡単な前提条件から、mocha/chaiの使い方の概要が分かる部分までを説明したいと思います。 そもそもテストとは何? ソフトウェア開発におけるテストとは、ソフトウェアの振舞いが想定した通りであるかを検証することです。ソフトウェアのサブルーチンを取り出してテストする「単体テスト/ユニットテスト」と、ソフトウェア全体の挙動をテストする「結合テスト」があります。mocha・chaiはこのうちの「単体テスト」を対象としたツールです。 じゃあ単体テストって何をすることなの? 単体テストとは、ある特定の関数を対象に、入力値と出力値が仕様
describe('Todo', () => { var Todo: any = require('../lib/todo'); // 既に大部分が実装されているものとする var TodoStub: any; beforeEach(() => { /* TodoStub */ TodoStub = { get: sinon.stub(Todo.prototype, 'get').returns('dummy'), put: sinon.stub(Todo.prototype, 'put'), remove: sinon.stub(Todo.prototype, 'remove'), }; }); });
こんにちは、ほそ道です。 前回のJasmineモジュールテストに引き続きテストを掘り下げていきます。 今回はUIテストをやってみたいと思います。前回分も読んでおいていただくと理解度シナジーが起こって良い感じになると思います。 目次はこちら 今回扱う範囲/扱わない範囲 まずはブラウザ上でJavaScriptを実行しJasmineと絡めて実行結果をテストします。 次にブラウザ上のDOMの状態(スタイル含む)をテストします。 今回のテスト内容にとりあえず遷移というかページ(リ)ロードは含めません。これが絡むと非常に厄介さが増すので遷移は別途取り上げたいと思います。 Karmaを実行する まずはKarmaの実行から。 Karmaは実ブラウザでJavaScriptコードを実行できる実行環境で、テストフレームワークと組み合わせてテストを行う事ができます。 エミュレータやヘッドレスブラウザではなく実ブラ
フロントエンドエンジニア養成読本のテストランナーの項を写経してたら思いがけないエラーに遭遇したのでその解決方法。 まずは、本の通り、foo.jsとfoo_spec.jsを書いて設定ファイル(karma.conf.js)を作ってからターミナル上でKarmaを起動します。 すると、 PhantomJS 1.9.7 (Mac OS X) ERROR ReferenceError: Can't find variable: chai Chrome 36.0.1985 (Mac OS X 10.9.4) ERROR Uncaught ReferenceError: chai is not defined のエラーが。 そこで、 karma.conf.jsの中を見て、 frameworks: ['mocha'],の部分を frameworks: ['mocha', 'chai'],と書き換えて再度ター
buster staticのようにコマンドで、テストやデバッグ用のWebサーバが立てられるといいなと思って書きました。このスクリプトをPYTHONPATHが通っているディレクトリに放り込んでおき、 python -m mocha_server lib/*.js test/*.js でカレントディレクトリでWebサーバを起動させます。 実行するには、python2(3は不可)とFlaskというフレームワークが必要です。 # !/usr/bin/env python # coding: utf-8 """ Mocha server usage: $ python mocha_server.py lib/*.js test/*.js or $ python -m mocha_server lib/*.js test/*.js """ PORT = 8008 import sys import o
mocha をブラウザで使う場合、mocha.setup() で BDD, TDD などのスタイルを指定し、それに応じて describe/it, suite/test などの関数が window に登録されます。RequireJS と一緒に使う場合、テストコードが評価される際に mocha.setup() が呼ばれていないと、describe などが定義されておらずエラーになってしまいます。 そこでまず思いつくのは require() を入れ子状に呼ぶことですが、いまいちイケていません。 require(['mocha'], function () { mocha.setup('bdd'); require(['test/foo_test'], function () { mocha.run(); }); });
WebStormだと様々な形式のNode.jsアプリが簡単にデバッグできます. 実際に画像で見てみましょう 単純なNode.jsアプリの場合 1. Javascriptを書いてブレークポイントを置く 2. 右クリック>Debug app.js 3. やったぜ Mochaのテストをデバッグしたい場合 1. mochaを入れる 上メニューFile>Settings > Node.js and NPM > 緑の+ボタン > mochaをInstall Package 2. mochaのテストを書いてブレークポイントを置く testというフォルダを作ってその中にテストJS 3. 上メニューRun>Edit Configurations 4. 左上の+ボタン>Mocha 5. Mochaの設定をしてOKで閉じる ほとんどの項目は初期のままでよい. 以下の項目は自分で指定する必要があるかも 項目名 意
単体テストの件数や可否ももちろんですが、コードのカバー率も可視化されることで、品質向上の1つの指標にもなります。 Node.jsで開発しているプロジェクトについて、こういったデータをgruntタスクで簡単に生成できるようにしましょう。 仕組みとして使うものは以下のとおりです。 grunt: JSタスクランナー mocha: JSテストフレームワーク chai: BDD/TDDアサーションライブラリ sinon: Spy,Stub,Mockライブラリ istanbul: コードカバレッジ計測ツール gruntは既に導入済みで、活用している前提とします。 JSのテストはJasmineが有名ですが、自由度の高いmocha+chai+sinonが個人的にはお気に入りなのでこちらを使います。 コードカバレッジ計測はいくつかの選択肢がありますが、メソッドや行、分岐等を計測できるistanbulを使いま
var gulp = require('gulp'); var gutil = require('gulp-util'); var webpack = require('webpack'); var WebpackDevServer = require('webpack-dev-server'); var webpackConfig = require('./webpack.config.js'); var open = require('gulp-open'); var mocha = require('gulp-mocha'); // default task is browser test gulp.task('default', ['browser-test']); // browser test gulp.task('browser-test', function (callba
このプロジェクトは以前のプロジェクトにmochaとReactの対応、自動ビルド時間短縮を施した置き換え版です。 GitHubへのリンク 概要 このプロジェクトは、AltJS(TypeScript & CoffeeScript) & Browserify & mocha & React構成の雛形プロジェクトです、以下の機能を持っています。 TypeScript、Browserifyの差分ビルド gulp.watch、Watchifyの変更監視による自動ビルド TypeScript、CoffeeScriptのソースファイルを混在出来る ファイルごとに型が欲しいか、短く書きたいか、で好きな方を選べばいい CoffeeScriptで書いたクラスをTypeScriptでrequireして使う、等 ※当然ですが、型チェックをするならTypeScript同士じゃないとダメ mochaによるテスト また、
var assert = require('assert'); it('test1 strictEqual', function() { var a = 'abcde'; var b = 'abcdf'; assert.strictEqual(a, b); }); it('test1 eqeqeq', function() { var a = 'abcde'; var b = 'abcdf'; assert(a === b); }); it('test2', function() { var a = { hoge: 12 }; var b = { hoge: 13, fuga: 56 }; assert.deepEqual(a, b); }); 1) test1 strictEqual 2) test1 eqeqeq 3) test2 0 passing (15ms) 3 failing
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く