【发布时间】:2015-12-03 21:50:56
【问题描述】:
Chosen 对我来说非常有用,但我不知道如何让我的验收测试发送表单提交上的值。
车把模板:
<form>
{{#ember-chosen value=country}}
{{#each countries as |country|}}
<option value={{country}}>{{country}}</option>
{{/each}}
{{/ember-chosen}}
{{#link-to 'countries.show' (query-params country=country) tagName='button' type='submit' replace=true class="submit__button"}}Search{{/link-to}}
</form>
验收测试:
test 'Searching for a country', (assert) ->
visit '/search'
find('.chosen-select').val('USA')
find('.chosen-select').trigger('chosen:updated')
click('.submit__button')
andThen ->
assert.equal find(".chosen-select :selected").text(), "USA"
这失败了,因为提交国家甚至没有作为查询参数传入,而只是在测试中。
如果我在控制台中执行此操作,也会发生同样的事情。如果我打开控制台并执行以下操作:
$('.chosen-select').val('USA')
$('.chosen-select').trigger('chosen:updated')
然后选择在我眼前更新!但是随后点击提交会产生与测试相同的结果,即国家没有传入查询参数中。
点击下拉菜单中的“美国”,然后点击提交,效果很好。
更新
Chad Carbert 下面的回复给了我答案。具体结果如下:
$('.chosen-select').val('USA')
$('.chosen-select').trigger('chosen:updated')
仅更新 DOM。不是 Ember 的数据绑定。
$('.chosen-select').trigger('change', {'selected': 'USA'})
更新数据绑定(这是我真正需要的),而不是 DOM。 由于这仅用于我的验收测试并且我不需要查看 DOM 更改,因此我的测试现在看起来像这样:
test 'Searching for a country', (assert) ->
visit '/search'
find('.chosen-select').trigger('change', {'selected': 'USA'})
click('.submit__button')
andThen ->
assert.equal find(".chosen-select :selected").text(), "USA"
这就像一个魅力!但是,如果您愿意,同时执行这三个操作也没有什么坏处:
test 'Searching for a country', (assert) ->
visit '/search'
find('.chosen-select').val('USA')
find('.chosen-select').trigger('chosen:updated')
find('.chosen-select').trigger('change', {'selected': 'USA'})
click('.submit__button')
andThen ->
assert.equal find(".chosen-select :selected").text(), "USA"
谢谢乍得!
【问题讨论】:
-
顺便说一句,使用 ember
fillIn助手对选择的选择根本不起作用。那就是我正在更改val并触发chosen:updated。这至少改变了浏览器中的选择,这就是为什么我认为它适用于我的验收测试。
标签: ember.js ember-cli jquery-chosen acceptance-testing