奇怪的行为删除关键字phantomjs

时间:2014-02-18 16:05:39

标签: javascript unit-testing jasmine phantomjs karma-runner

上下文

我有一段代码贯穿karmajasminephantomjs作为浏览器,我的问题是我无法找出原因{{1} }关键字不起作用。我查看了phantomjs github以找到关于关键字支持的提示或明确的文档,但是徒劳无功。

更新

实际上它现在似乎不适用于铬......

这是期望的输出

  

ShopDataServiceTest不应该有实例方法删除FAILED   期望{getModelName:Function}没有方法'remove'。

这是我测试过的代码:

delete

这里是由业力

执行的代码
// CRUDService basically returns a new class
// with a prototype containing a method remove

ShopDataService = CRUDService.build(modelName);
delete ShopDataService.prototype.remove;

重要提示

此代码在karma下运行,在这种情况下不起作用, 但在chrome 上运行时它有效,我是否遗漏了某些内容在这?


编辑之前我没有提及,expect(ShopDataService.prototype).not.toHaveMethod('remove'); 表达式返回typeof ShopDataService.prototype.remove,正如ppoliani指出的那样。

2 个答案:

答案 0 :(得分:1)

当你意识到原型错误时,这就是尴尬的时刻!

为什么我错了

ShopDataService只是有自己的属性remove,因为它是从CRUD继承而来的,它的原型中有一个方法remove。

我有这个

var CRUD = function CRUD(modelName) {
        this.getModelName = function () {
            return modelName;
        };
    };

    CRUD.prototype = {
        save: function () {
            // ABSTRACT
        },
        /**
         * Deletes instance from id property
         * @return http promise
         */
        remove: function () {
            // call api
        }
    };

现在可以使用

var CRUD = function CRUD(modelName) {
        this.getModelName = function () {
            return modelName;
        };

        this.save = function () {};
        this.remove = function () {};
    };

作为一个副作用,我不应该点击CRUD原型来定义remove方法,而是在新创建的扩展CRUD的原型上定义它。

答案 1 :(得分:0)

如果您在“严格模式”下运行代码;它可能不允许您完全使用删除操作符。