单元测试如何访问对象 属性
Unit Testing How to access object property
我有一个简单的 angular 服务:
app.service('myService', function() {
this.getMsg = function (status, data) {
var errMsg = '';
if (status.toString()[0] == 4) {
if ((data.message.indexOf("3 tries left") > -1) || (data.message.indexOf("2 tries left")) > -1){
errMsg = "Opps, try later";
}
else {
errMsg = "Please try again.";
}
}
if (status.toString()[0] == 5) {
errMsg = "Under Construction";
}
return errMsg;
};
});
并且我已经编写了一个测试来确保我的 getMsg
函数存在,但是当我尝试测试该函数时,我得到一个错误:
TypeError: data.message is undefined
测试:
describe('myService', function (){
var myService;
beforeEach(function (){
module('myApp');
inject(function(_myService_) {
myService = _myService_;
});
});
it('should have an getMsg function', function () {
expect(angular.isFunction(myService.getMsg)).toBe(true);
});
it('test fucntion', function (){
var result = myService.getMsg(400, "some text to test");
expect(result).toBe('bar!!!');
});
});
您在编写函数时期望 getMsg
函数的行为方式与您在测试时期望它的行为方式有所不同。
当你写它的时候,你希望第二个参数是一个对象,它有一个 message
属性 是一个字符串。
当你测试它时,你希望第二个参数是一个字符串。
如果你的功能是正确的,你应该改变这一行
var result = myService.getMsg(400, "some text to test");
到
var result = myService.getMsg(400, { message : "some text to test"});
我有一个简单的 angular 服务:
app.service('myService', function() {
this.getMsg = function (status, data) {
var errMsg = '';
if (status.toString()[0] == 4) {
if ((data.message.indexOf("3 tries left") > -1) || (data.message.indexOf("2 tries left")) > -1){
errMsg = "Opps, try later";
}
else {
errMsg = "Please try again.";
}
}
if (status.toString()[0] == 5) {
errMsg = "Under Construction";
}
return errMsg;
};
});
并且我已经编写了一个测试来确保我的 getMsg
函数存在,但是当我尝试测试该函数时,我得到一个错误:
TypeError: data.message is undefined
测试:
describe('myService', function (){
var myService;
beforeEach(function (){
module('myApp');
inject(function(_myService_) {
myService = _myService_;
});
});
it('should have an getMsg function', function () {
expect(angular.isFunction(myService.getMsg)).toBe(true);
});
it('test fucntion', function (){
var result = myService.getMsg(400, "some text to test");
expect(result).toBe('bar!!!');
});
});
您在编写函数时期望 getMsg
函数的行为方式与您在测试时期望它的行为方式有所不同。
当你写它的时候,你希望第二个参数是一个对象,它有一个 message
属性 是一个字符串。
当你测试它时,你希望第二个参数是一个字符串。
如果你的功能是正确的,你应该改变这一行
var result = myService.getMsg(400, "some text to test");
到
var result = myService.getMsg(400, { message : "some text to test"});