作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 ember-cli 0.2.7
使用 Ember.js 1.12.0
应用程序,其中一段代码如下所示:
controllers/cart.js
import Ember from 'ember';
export default Ember.Controller.extend({
footwearInCart: Ember.computed('model.@each.category', function() {
return this.get('model').any(product => product.get('category').includes('Footwear'));
})
});
它遍历模型中的所有对象,如果它们的类别属性中包含“footwear”,则返回 true。
我正在尝试这样测试它:
tests/unit/controllers/cart-test.js
import { moduleFor, test } from 'ember-qunit';
import Ember from 'ember';
var products = [Ember.Object.create({name: 'shoe', category: 'Footwear', subTotal: 10}), Ember.Object.create({name: 'shirt', subTotal: 20})];
var model = Ember.ArrayProxy.create({
content: Ember.A(products)
});
moduleFor('controller:cart', {
beforeEach() {
this.controller = this.subject();
}
});
test('footwearInCart property works', function(assert) {
this.controller.set('model', model);
assert.equal(this.controller.get('footwearInCart'), true, 'The footwearInCart function returns true if the category property of product in cart contains the word "Footwear"');
});
当我运行应用程序时,代码按照它应有的方式工作,但 PhantomJS
显然无法识别 .includes 方法。 (该方法记录在此处 String.prototype.includes()
如何让 PhantomJS 识别 .includes 方法?
谢谢!
最佳答案
显然 PhantomJS 没有正确实现 ES6 特性。幸运的是 String.prototype.includes
很容易填充。您可以选择是否要在测试套件或 Controller 中执行此操作。 polyfill 代码是:
if (!String.prototype.includes) {
String.prototype.includes = function() {'use strict';
return String.prototype.indexOf.apply(this, arguments) !== -1;
};
}
要么把它放在 assert
调用之前(你可能想使用一个标志来记住你添加了 polyfill 并在 assert
之后删除它),或者做它在模块本身中,在 export
block 之前或之后。
关于javascript - 如何在 PhantomJS 中测试 String.prototype.includes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31360504/
我是一名优秀的程序员,十分优秀!