业力测试Lodash工厂

西林齐尔

我已经在我的角度应用程序中为lodash库创建了一个工厂,如下所示:

angular.module('lodash',[]).service('_', function(){
    var _ = window._;
    // i am delete the _ property on the window
    // so that i m enforced to dependency inject
    // lodash each time i want to use it
    // instead of using the global lodash library
    delete window._;
    return _;
});

现在我想使用以下测试来测试我的模块服务和即时消息

describe('lodash', function() {
    // load the utilities module
    beforeEach(module('lodash'));

    describe('_', function() {
        it('should be defined', inject(function(_) {
            expect(_).not.toBe(null);
        }));
        it('should have toArray() defined', inject(function(_) {
            expect(_.toArray).toBeDefined();
        }));
    });
});

此第二次测试未成功。进行这项工作的唯一方法是从我的服务实现中删除以下内容。

delete window._;

我的问题是:由于delete运算符仅从window对象中删除属性,而不是原始引用,因此为什么删除window._会破坏测试,并且_对象在测试中为空?

莫菲洛斯

我记得有类似的问题。不知道问题是否完全相同,但我解决了将lodash的属性复制到新对象中的问题,然后我从工厂返回了该对象:

function lodash($window) {
    var lodashLib = $window._;
    var _ = {};

    delete( $window._ );

    // Instead of using directly what I got from the window object, I copy its properties
    // I cannot explain why this works better, but it solved the problem for me
    angular.extend(_, lodashLib);

    return _;
}

其次,我认为您应该谨慎进行测试not.toBe(null)toBeDefined()可能会更好(有很多非常精确的方法可以使用Jasmine测试事物)。最后,对于您的第二个测试,我认为正确的测试应该是expect(typeof _.toArray).toBe('function');,这比刚刚定义的要具体得多:)

我希望我回答了您的问题,即使我对单元测试的了解总体上还很乏味。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用业力测试

来自分类Dev

业力,空的测试套件

来自分类Dev

业力测试rootScope。$ on $ locationChangeSuccess

来自分类Dev

角业力测试中的模拟条纹

来自分类Dev

Cordova sqliteplugin业力测试说明

来自分类Dev

gulp业力测试TypeError:服务器不是功能

来自分类Dev

业力茉莉花:如何测试$ translate.use?

来自分类Dev

业力测试运行器-无法捕获Chrome

来自分类Dev

如何使用业力在测试文件之间共享模拟?

来自分类Dev

用于自动用户交互测试的业力?

来自分类Dev

业力测试错误“无法初始化ocLazyLoad”

来自分类Dev

让笨拙的业力运行一个单元测试

来自分类Dev

在詹金斯发布业力单元测试

来自分类Dev

业力单元测试跨域资源AngularJS

来自分类Dev

业力-茉莉花:测试失败时显示行号

来自分类Dev

为什么业力不执行任何测试?

来自分类Dev

业力测试:PhantomJS:ReferenceError:找不到变量:音频

来自分类Dev

业力测试运行程序比预期的慢

来自分类Dev

断言期间拒绝诺言时,业力通过测试

来自分类Dev

angularjs单元测试因果茉莉困境的业力

来自分类Dev

使用业力测试不使用$ scope的控制器

来自分类Dev

无法将提供商注入业力测试

来自分类Dev

为什么我的业力测试不起作用?

来自分类Dev

每项测试的业力+茉莉花+角质+ http GET

来自分类Dev

获取用于业力单元测试的json文件

来自分类Dev

无法将控制器注入业力测试

来自分类Dev

在Angular 1.5中将模块注入业力测试

来自分类Dev

业力并行执行测试用例两次

来自分类Dev

具有业力的Angular 8测试组件失败