So, after moving some code around I found that the variables not involved on making $rootScope change to test the feature, should be defined before compiling the element to test. Thanks @Jonathan for the hint.
Here is the working code with additional test cases:
it('should evaluate expressions to match switch value', inject(function($rootScope, $compile) {
$rootScope.array = ["leog", ".me"];
$rootScope.obj = {"key": "value"};
$rootScope.$apply();
element = $compile(
'<div ng-switch="select">' +
'<div ng-switch-when="obj.key">obj.key:{{obj.key}}</div>' +
'<div ng-switch-when="array[0]">array[0]:{{array[0]}}</div>' +
'<div ng-switch-when="array[1]">array[1]:{{array[1]}}</div>' +
'</div>')($rootScope);
expect(element.html()).toEqual('<!-- ngSwitchWhen: obj.key -->' +
'<!-- ngSwitchWhen: array[0] -->' +
'<!-- ngSwitchWhen: array[1] -->');
$rootScope.select = "value1";
$rootScope.$apply();
expect(element.text()).toEqual('obj.key:value');
$rootScope.select = "leog";
$rootScope.$apply();
expect(element.text()).toEqual('array[0]:leog');
$rootScope.select = ".me";
$rootScope.$apply();
expect(element.text()).toEqual('array[1]:.me');
}));
Thanks you all.