我已经阅读了类似的问题,但它们并没有解决我的问题。我是js测试的新手,所以我想我可能做错了。
表单生成此HTML
<form class="new_category_item_key" id="new_category_item_key" action="/guides/dungeon-boss/categories?category_id=heroes" accept-charset="UTF-8" data-remote="true" method="post"><input name="utf8" type="hidden" value="✓" /><input type="hidden" name="authenticity_token" value="b7wiF07zYh/Nl727M3y0Uk1TbroMJFuGqTK6fYNlNted/5G4Wmz4BZLb7IazzyP5md/wWRb1D28ePhrzt2uMSA==" />
<label for="category_item_key_name">Key name</label>
<input type="text" name="category_item_key[name]" id="category_item_key_name" />
<select name="category_item_key[key_type]" id="category_item_key_key_type"><option value="1">Value</option>
<option value="2">Text</option>
<option value="3">Image</option></select>
<input type="submit" name="commit" value="Add New Key" />
</form>
我在表单上进行了以下集成测试
setup do
@user = users(:michael)
@user1 = users(:archer)
@guide = Guide.find(1)
@mod_relationship = game_mods_relationships(:mod1)
@category = Category.find(1)
Capybara.current_driver = Capybara.javascript_driver # :selenium by default
end
test "adding keys mod success then fail" do
log_in_as(@user)
get edit_guide_category_path(@guide, @category)
assert_template 'categories/edit'
assert_difference 'CategoryItemKey.count', 1 do
fill_in 'Key name', with: "diablo"
click_button "commit"
end
end
当我运行测试时,我收到以下错误
Capybara::ElementNotFound: Capybara::ElementNotFound: Unable to find field "Key name"
查看HTML我可以看到该字段存在。如果我尝试使用输入id
,它仍然会失败,如果我删除填充行,那么它说它找不到点击的按钮也在那里。我认为它得到了正确的页面因为get edit_guide_category_path(@guide, @category)
适用于其他测试(但它们是非js测试并且不使用selenium)。
它可能很简单,但我无法得到它。
答案 0 :(得分:2)
您混合了两个不同的库 - 您不能将get
与Capybara一起使用,而是使用visit(url)
转到该页面。您通常也不应该在功能测试中断言模板,即低级测试。