gpt4 book ai didi

javascript - 如何在 PhantomJS 中测试 String.prototype.includes

转载 作者:可可西里 更新时间:2023-11-01 02:36:16 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com