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

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"});