单元测试无效方法-Jasmine,javascript
这是我公开的控制器代码中的函数单元测试无效方法-Jasmine,javascript,javascript,unit-testing,jasmine,titanium-alloy,Javascript,Unit Testing,Jasmine,Titanium Alloy,这是我公开的控制器代码中的函数 //unit test code $.getMessagesUnit = function(chatId) { if (!(Titanium.Network.networkType === Titanium.Network.NETWORK_NONE)) { apiHelper.APIGetRequest(xxxxxxxx + '/messages/' + args.chatId, function(e) {
//unit test code
$.getMessagesUnit = function(chatId) {
if (!(Titanium.Network.networkType === Titanium.Network.NETWORK_NONE)) {
apiHelper.APIGetRequest(xxxxxxxx + '/messages/' + args.chatId, function(e) {
$.view_indicator.visible = true;
var status = this.status;
if (status == 200) {
console.log('get chats');
var data = JSON.parse(this.responseText);
console.log(data);
var rows = [];
var i = 0;
var blob;
for (x in data.messages) {
//Ti.API.debug(JSON.stringify(messages[x]));
var nickname = null;
var chatBlob = null;
var picture = null;
var timeStampCon = null;
chatBlob = data.messages[x].message;
nickname = data.messages[x].user.nickname;
picture = data.messages[x].user.pictures[0];
//alert(data.messages[x].message);
timeStampCon = utilities.getCurrentTimeFromStamp(data.messages[x].timestamp);
textArea.addLabel(timeStampCon);
//alert(data.messages[x].user.id);
if (args.pickedId == data.messages[x].user.id) {
textArea.recieveMessage(chatBlob);
textArea.addLabel("\n");
} else {
textArea.sendMessage(chatBlob);
textArea.addLabel("\n");
}
}
//return rows;
//end
$.view_indicator.visible = false;
}
}, function(err) {
alert('Unknown error from api');
$.view_indicator.visible = false;
});
} else {
alert('No internet connection found');
$.view_indicator.visible = false;
}
};
//end
以下是我的单元测试代码:
it('test chat window function.', function() {
$ = Alloy.createController('chatWindow', {});
expect($.getMessagesUnit(123).chatBlob). toBeDefined();
});
我想在api调用后测试JSON请求中的变量是否已定义:
var nickname = null;
var chatBlob = null;
var picture = null;
var timeStampCon = null;
确保定义了我从单元测试中获取的数据。我得到以下错误:
[INFO] : . ============================================================
[ERROR] : . THERE WERE FAILURES!
[ERROR] : . ============================================================
[ERROR] : . Recap of failing specs:
[ERROR] : . ------------------------------------------------------------
[ERROR] : . chatWindow controller test chat window function.. - Expected undefined to be defined.
我对单元测试还很陌生,我怎么能在这样一个无效的方法中测试单个变量呢
干杯,伙计们
更新-使用间谍:
it('test spies in receive message function.', function() {
$ = Alloy.createController('chatWindow', {});
spyOn($, 'textarea.recieveMessage');
$.getMessagesUnit(123);
expect(textarea.recieveMessage).toHaveBeenCalled();
});
[INFO] : . - test spies in receive message function.. (FAILED)
[INFO] : . - - Expected spy recieveMessage to have been called.
您无法访问chatBlob,因为它只能在success函数创建的闭包中访问。在调用
$之前,您可以在textArea
对象上的receivemessage
函数中添加一个间谍。getMessagesUnit(123)
然后检查间谍是否接收到调用以及该调用的参数,即您的chatBlob值 我该怎么做,干杯。我对茉莉花很陌生,它快把我逼疯了!用间谍代码修改了OP,无法运行。Cheers spyOn函数中的第二个参数需要是您正在监视的函数的名称,因此spyOn($.textArea,'ReceiveMessage')
是您想要的(假设textArea是$object的一个属性。不起作用,似乎它没有跟踪到async方法。如果我在async方法之外调用该函数,它就会起作用。