我有一段代码贯穿karma
,jasmine
和phantomjs
作为浏览器,我的问题是我无法找出原因{{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指出的那样。
答案 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)
如果您在“严格模式”下运行代码;它可能不允许您完全使用删除操作符。