首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >toEqualData matcher在AngularJS应用程序中中断测试

toEqualData matcher在AngularJS应用程序中中断测试
EN

Stack Overflow用户
提问于 2015-07-31 09:05:49
回答 2查看 924关注 0票数 0

我为AngularJS应用程序的服务编写了以下非常简单的测试:

代码语言:javascript
复制
describe('Services', function () { 

    beforeEach(function(){
        this.addMatchers({
            toEqualData: function(expected) { 
                return angular.equals(this.actual, expected);
            }
        });
    });

    beforeEach(module('myapp.services'));

    describe('Album service', function(){
        var Album;

        beforeEach(inject(function (_Album_) { 
            Album = _Album_;
        }));

        it('can get an instance of the Album factory', inject(function (Album) { 
            expect(Album).toBeDefined();
        }));
    });
});

我刚刚添加了定制的toEqualData matcher 如AngularJS文档中所建议的。然而,这破坏了测试。我使用Gulp来使用gulp-karma运行测试(尽管如果我直接使用Karma也会出现同样的问题),并且我看到了以下错误消息:

代码语言:javascript
复制
$ gulp test
[10:00:04] Using gulpfile ~/Projects/myapp/gulpfile.js
[10:00:04] Starting 'jshint'...
[10:00:04] Starting 'karma'...
WARN `start` method is deprecated since 0.13. It will be removed in 0.14. Please use
  server = new Server(config, [done])
  server.start()
instead.
31 07 2015 10:00:04.362:INFO [karma]: Karma v0.13.3 server started at http://localhost:9876/
31 07 2015 10:00:04.368:INFO [launcher]: Starting browser PhantomJS
[10:00:04] Finished 'jshint' after 277 ms
31 07 2015 10:00:04.631:INFO [PhantomJS 1.9.8 (Linux 0.0.0)]: Connected on socket sFxRfQ6bJtqM_utNAAAA with id 27252937
PhantomJS 1.9.8 (Linux 0.0.0) Services Album service can get an instance of the Album factory FAILED
        TypeError: 'undefined' is not a function (evaluating 'this.addMatchers')
            at /home/matthew/Projects/myapp/tests/services.tests.js:7
PhantomJS 1.9.8 (Linux 0.0.0): Executed 7 of 7 (1 FAILED) (0.04 secs / 0.022 secs)
[10:00:04] Finished 'karma' after 558 ms
[10:00:04] Starting 'test'...
[10:00:04] Finished 'test' after 11 μs

我看不出我哪里出问题了。有什么想法吗?实际上,如果我取出定制的匹配器(我还没有实际使用,但计划这样做),它实际上工作得很好。因此,似乎matcher是罪魁祸首,但由于它是从角度文档中复制和粘贴的,所以我不知道为什么它不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-31 10:27:47

最终解决了这个问题。事实证明,Jasmine在1.3-2.0之间发生了变化,而AngularJS文档似乎没有给出任何有关这方面的信息。下面是我如何解决这个问题的方法,希望其他被困在这个问题上的人能够找到一个可行的解决方案:

代码语言:javascript
复制
describe('Services', function () { 

    beforeEach(function(){
        jasmine.addMatchers({
            toEqualData: function(util, customEqualityTesters) { 
                return { 
                    compare: function(actual, expected) { 
                        return { 
                            pass: angular.equals(actual, expected)
                        };
                    } 
                };
            } 
        });
    });

    beforeEach(module('myapp.services'));

    describe('Album service', function(){
        var Album;

        beforeEach(inject(function (_Album_, _$httpBackend_) { 
            Album = _Album_;
            mockBackend = _$httpBackend_;
        }));

        it('can get an instance of the Album factory', inject(function (Album) { 
            mockBackend.expectGET('https://myapp.com/api/albums').respond([{id: 1}, {id: 2}]);
            expect(Album).toBeDefined();
            var albums = Album.query();
            mockBackend.flush();
            expect(albums).toEqualData([{id: 1}, {id: 2}]);
        }));
    });
});

基本上,您所做的就是在添加matcher时更改jasminejasmine,将actualexpected作为参数传递到函数中,并使用它们而不是this。现在似乎像预期的那样工作。

编辑:原来这不起作用,只是默默地失败了。我现在已经改正了。

票数 9
EN

Stack Overflow用户

发布于 2015-07-31 09:25:48

我相信您正在尝试在测试中注入Album,但这是一个实例。您已经在_Album_中注入了beforeEach

尝试删除第二个inject (it()中的那个)。

安古拉博士中的示例

代码语言:javascript
复制
// Defined out reference variable outside
var myService;

// Wrap the parameter in underscores
beforeEach( inject( function(_myService_){
  myService = _myService_;
}));

// Use myService in a series of tests.
it('makes use of myService', function() {
  myService.doStuff();
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31742261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档