Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-排序测试不起作用,但代码起作用_Javascript_Angularjs - Fatal编程技术网

Javascript AngularJS-排序测试不起作用,但代码起作用

Javascript AngularJS-排序测试不起作用,但代码起作用,javascript,angularjs,Javascript,Angularjs,我意识到这一定很愚蠢,但我在AngularJS和我的脚本中的单元测试方面遇到了麻烦。代码工作正常(初始化和测试除外)。然而,端到端测试仍然有效 业力测试错误: PhantomJS 1.9.7 (Windows 7) Controllers EventsCtrl Should set the default sort to be Start Date FAILED Expected undefined to be 'StartDate'. PhantomJS 1.9.7 (Windows

我意识到这一定很愚蠢,但我在AngularJS和我的脚本中的单元测试方面遇到了麻烦。代码工作正常(初始化和测试除外)。然而,端到端测试仍然有效

业力测试错误:

PhantomJS 1.9.7 (Windows 7) Controllers EventsCtrl Should set the default sort to be Start Date FAILED
    Expected undefined to be 'StartDate'.

PhantomJS 1.9.7 (Windows 7): Executed 2 of 2 (1 FAILED) (0.004 secs / 0.009 secs)
describe('Controllers', function() 
{
    describe('EventsCtrl', function()
    {
        var scope;
        var Control;

        // Before Each Test - Load Module
        beforeEach(module('App'));

        // Before Each Test - Inject Controllers
        beforeEach(inject(function($controller)
        {
            scope = {};
            Control = $controller('EventsCtrl', {$scope:scope});
        }));

        it('Should create "Events" with 2 entries', function()
        {
            expect(Control).toBeDefined();
            expect(Control).not.toBeNull();
            expect(scope.Events.length).toBe(2);
        });

        it('Should set the default sort to be Start Date', function() 
        {
            expect(scope.EventSort).toBe('StartDate');
        });
    });
});
控制器:

var App = angular.module('App', []);
App.controller('EventsCtrl', function($scope)
{
    $scope.Events = [
    {
        'StartDate': 20140329,
        'StartTime': 100000,
        'Name': 'Event 1',
        'Venue': 'XYZ Venue',
    },
    {
        'StartDate': 20140208,
        'StartTime': 093000,
        'Name': 'Final Event',
        'Venue': 'ABC Venue',
    }
    ];
    $scope.EventSort = 'StartDate';
});
HTML代码段

Sort by:
    <select ng-model="EventSort">
        <option value="StartDate">Earliest Date</option>
        <option value="Venue">Venue</option>
    </select>

<ul class="EventsList">
    <li ng-repeat="EventData in Events | filter:EventsFilter | orderBy:EventSort">
        {{EventData.Name}}
        <p>{{EventData.StartDate}}</p>
        <p>{{EventData.Venue}}</p>
    </li>
</ul>

排序依据:
最早日期
地点
  • {{EventData.Name} {{EventData.StartDate}

    {{EventData.vention}

我希望考试能顺利进行


更进一步地说,我的第二个问题是,是否有一种方法可以告诉它在任何可用字段上排序,而不必详细说明它们?某种元素列表。可能对select?

中的选项重复ng,我不知道这是否能解决您的问题,因为您没有告诉两个测试中的哪一个未通过以及错误消息是什么。但在第一眼看到时,尝试替换:

    beforeEach(inject(function($controller)
    {
        scope = {};
        Control = $controller('EventsCtrl', { $scope: scope });
    }));
与:


谢谢大家的建议。结果证明这是一个愚蠢的错误。我已经将应用程序文件移动到事件的Modules子目录中,以便在逻辑上将所有内容与大型项目的子目录分组

我在编辑器中拥有并正在更改的代码仍然在旧的app/js目录中,而不是测试文件或网页所使用的目录


应该移动文件,而不是复制它们,直到它们工作。再次感谢您的建议。

您遇到了什么样的错误?@tasseKATT抱歉,我用错误文本更新了问题。未设置默认开始日期。很抱歉,最初忘记了错误,但已使用错误更新了问题。$rootScope没有帮助,也没有纠正错误。我还没有在教程中看到$rootScope,所以可能代码的其余部分没有足够的结构。我只是在第5和第6个教程步骤附近,在教程运行时自己进行更改。
    beforeEach(inject(function($controller, $rootScope)
    {
        scope = $rootScope.$new();
        Control = $controller('EventsCtrl', {$scope:scope});
    }));