sails.js のユニットテストについて
本家のほうでも質問させて頂いたのですが、日本語版でも質問させてください。 今、sails.jsを用いてウェブアプリを作成しております。 sails.jsはデフォルトでテスト環境がないため、こちらのサイトを参考にテスト環境を作成しました。 (http://thenullpointer.in/2014/09/08/Testing-and-code-coverage-using-grunt-mocha-istanbul-in-Sails-js/index.html) そしてテスト用フレームワークにwolfpackをインストールして以下のようなコードを作成し、実行したところ以下のようなメッセージが出てエラーになってしまいます。
1) The UserController should return a HTTP 200 response if the user was added successfully:
ReferenceError: runs is not defined
at Context.<anonymous> (my_project_path/test/controllers/UserController.spec.js:42:9)
2) The UserController #create ユーザーが作成されるはず:
ReferenceError: sails is not defined
at Object.module.exports.create (my_project_path/api/controllers/UserController.js:9:457)
コントローラテストのコードは以下の通りです。 global.jsの中のsails:trueのコメントは外している為、sails のインポート宣言はグローバルで使えるはずなのですがテストフォルダ以下では使えないのでしょうか? またテストフォルダ内で使えるようにするための何か設定が必要なのでしょうか? もし分かる方いらっしゃったらご教授いただけると助かります。
どうぞよろしくお願いします。
var UserController = require('../../api/controllers/UserController'),
sinon = require('sinon'),
constant = require('../../config/const'),
User = require('../../api/models/User'),
wolfpack = require('wolfpack');
global.User = wolfpack(User);
var request = {
params: {
username: 'testuser',
email: 'testuser@test.com',
familyname: 'test',
firstname: 'user',
gender: constant.constVal.gender.male,
subscription: true,
term: true
}
};
var response = {
send: sinon.stub()
};
describe('The UserController', function() {
describe('#create', function() {
it('ユーザーが作成されるはず', function() {
UserController.create(request, response);
expect(User.username.lastCall.args[0]).toBe(request.params.username);
expect(User.email.lastCall.args[0]).toBe(request.params.email);
expect(User.familyname.lastCall.args[0]).toBe(request.params.familyname);
expect(User.firstname.lastCall.args[0]).toBe(request.params.firstname);
expect(User.gender.lastCall.args[0]).toBe(request.params.gender);
expect(User.subscription.lastCall.args[0]).toBe(request.params.subscription);
expect(User.term.lastCall.args[0]).toBe(request.params.term);
})
});
it("should return a HTTP 200 response if the user was added successfully", function() {
// Run first part of test asynchronously (jasmine function)
runs(function() {
UserController.create(request, response);
});
// When the callback executes, it should call res.send, so we should wait for it
waitsFor(function() {
return response.send.called;
});
// Now we can test if the proper code was sent
runs(function() {
expect(response.send.lastCall.calledWith(200)).toBeTruthy();
});
});
});