it('should call setCampaignDate on click', function () {
let spySetCampaign = sinon.spy(wrapper.instance(), 'setCampaignDate');
let datePickers = wrapper.find('.campaign-date-tab').dive().find(Datepicker);
assert.equal(datePickers.length, 2);
console.log(datePickers);
var date = new Date();
for (let index = 0; index < datePickers.length; index++) {
datePickers.simulate('change');
sinon.assert.calledOnce(spySetCampaign.withArgs(date, 'startDate'));
}
});
我正在尝试模拟我的'更改'功能并尝试测试是否调用'setCampaignDate'。这里的问题是find返回的浅组件的长度是2:
let datePickers = wrapper.find('.campaign-date-tab').dive().find(Datepicker);
尝试在'datepickers'上调用模拟时,会出现如下错误:
'Error: Method “props” is only meant to be run on a single node. 2 found instead.'.
不确定如何模拟节点大于1的组件。
答案 0 :(得分:12)
不更改代码的多个组件的答案是使用酶API来获取所需按钮的正确索引。
import org.apache.spark.ml.linalg._
spark.udf.register("indices", (v: Vector) => v.toSparse.indices)
val pipeline = new Pipeline().setStages(Array(
new CountVectorizer().setInputCol("words").setOutputCol("vector"),
new SQLTransformer()
.setStatement("SELECT *, indices(vector) FROM __THIS__")
))
pipeline.fit(df).transform(df).show
// +---+----------------+--------------------+-------------------+
// | id| words| vector|UDF:indices(vector)|
// +---+----------------+--------------------+-------------------+
// | 1|[I, like, Spark]|(4,[0,1,3],[1.0,1...| [0, 1, 3]|
// | 2|[I, hate, Spark]|(4,[0,1,2],[1.0,1...| [0, 1, 2]|
// +---+----------------+--------------------+-------------------+
使用组件作为您正在测试的任何名称,并将索引作为您想要的数字。
答案 1 :(得分:4)
<强>问题:强> 这意味着当您查询&#39; .campaign-date-tab&#39;和&#39; Datepicker&#39;,finder返回2个元素。我们无法在2个不同的元素上执行任何事件(如点击)。
<强>解决方案:强> 您要访问的元素是什么,使其独一无二。
示例:设置一些属性以唯一标识元素
<CampaignDateTab class="campaign-date-tab" data-test="dateTab1"/>
并查询wrapper.find('[data-test="dateTab1"]')
再次,如果CampaignDateTab组件具有多个Datepicker组件。然后你必须用一些类名或属性名等来区分它们。
您只能在一个元素上模拟一个事件。查询某些元素不应返回多个元素。
答案 2 :(得分:0)
你正在进行for循环,然后使用datePickers
(数组)而不是单数的datePicker。
你应该可以这样做:
datePickers[index].simulate('change');
答案 3 :(得分:0)
我认为您应该添加.first()
。
类似这样的东西:
const selectedCompoent = Wrapper.find(exactlyComponent).first()
在您的情况下:
let datePickers = wrapper.find('.campaign-date-tab').dive().find(Datepicker).first()