0
プッシュ通知を送信する関数をテストしたいと思います。私は通知の送信をスタブしたいと思います。私はモカとサイロンを使用します。私はいくつかの構文でスタブしようとしましたが、うまくいきません。一つのスタブは、私が試した:sinonを使ったプッシュ通知のスチューブ
var gcm = require('node-gcm');
// Function to test
NotificationService.prototype.sendSpecificNotification = function (data) {
var self = this;
// Process data to create the users, title and text parameters
return self.send(users, title, text)
.then(function(pushResults) {
// expect ...
})
};
NotificationService.prototype.send = function (users, title, text) {
var registrationIds = [];
users.forEach(function (user) {
var push = user.preferences != null ? user.preferences.push : false;
if (push) {
var regId = user.preferences.pushRegId;
registrationIds.push(regId);
}
});
var deferred = Q.defer();
if (registrationIds.length > 0) {
var message = new gcm.Message();
message.addData('message', text);
message.addData('title', title);
message.delayWhileIdle = false;
message.timeToLive = 24 * 60 * 60;
var currentDate = new Date();
var notId = currentDate.getHours() * 60 * 60 + currentDate.getMinutes() * 60 + currentDate.getSeconds();
message.addData('notId', notId);
var sender = new gcm.Sender(config.gcm.senderId);
// I want to stub that call
sender.send(message, registrationIds, function (err, result) {
if (err) {
deferred.reject(new Error(error));
} else {
deferred.resolve(result);
}
});
} else {
deferred.resolve('');
}
return deferred.promise;
}
EDIT:
var sender = sinon.createStubInstance(gcm.Sender);
var gcmReturn = {
multicast_id: 1,
success: 1,
failure: 1,
canonical_ids: 1,
results: [{
registration_id: 'xxxx',
message_id: 'yyy'
}, {
error: 'InvalidRegistration'
}]
}
sender.send = function() {
return gcmReturn;
}
コードのテストにテスト
it('Subscription Push', function() {
var sender = sinon.createStubInstance(gcm.Sender);
var gcmReturn = {
multicast_id: 1,
success: 1,
failure: 1,
canonical_ids: 1,
results: [{
registration_id: 'xxxx',
message_id: 'yyy'
}, {
error: 'InvalidRegistration'
}]
}
sender.send.returns(Q.resolve(gcmReturn));
return fixtureService.clearDatabase()
.then(function() {
return fixtureService.load('./test/subscription-push.json');
})
.then(function() {
return notificationService.sendSpecificNotification();
});
});
私は 'TypeError例外を取得:すでにsender.send.returns(gcmReturn)にその最後の行を変更してみてください – Sydney
をwrapped'された送信ラップしようとしました。 – grimurd
私はもうエラーはありませんが、スタブは 'sendSpecificNotification'メソッドで使われていません。基本的にテストがタイムアウトします。 – Sydney