单元测试如何访问对象属性

时间:2015-05-18 08:53:22

标签: javascript angularjs jasmine karma-jasmine

我有一个简单的角度服务:

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未定义

测试:

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!!!');
  });
});

1 个答案:

答案 0 :(得分:2)

您在编写函数时期望getMsg函数的行为方式与您在测试函数时的预期行为方式之间存在差异。

当你编写它时,你希望第二个参数是一个具有message属性的对象,这是一个字符串。

测试时,您希望第二个参数为字符串。

如果您的功能正确,则应更改此行

var result = myService.getMsg(400, "some text to test");

var result = myService.getMsg(400, { message : "some text to test"});