我有一个包含不同 HTML 元素中的文本的页面,我想要一种快速验证文本的方法。
使用 jasmine 和 jasmine-query 加载 HTML 和测试 DOM。
例如,我想验证此 HTML 中的文本
<table id="users">
<thead>
<tr>
<td>user</td>
<td>permissions</td>
<td>last seen</td>
</tr>
</thead>
<tbody>
<tr>
<td>Darren</td>
<td>testuser,customer</td>
<td>today</td>
</tr>
<tr>
<td>Hillary</td>
<td>administrator</td>
<td>yesterday</td>
</tr>
</tbody>
</table>
假设我想验证表中的每一行都包含正确的文本。茉莉花测试文件:
it('should find correct text in table', function () {
expect( $('#users').find('tbody tr').first() ).toContainText('Darren testuser,customer today');
expect( $('#users').find('tbody tr').last() ).toContainText('Hillary administrator yesterday');
});
我会得到这个失败:
Testexample:: should find correct text in table: failed
Expected '<tr>
<td>Darren</td>
<td>testuser,customer</td>
<td>today</td>
</tr>' to contain text 'Darren testuser,customer today'. (1)
Expected '<tr>
<td>Hillary</td>
<td>administrator</td>
<td>yesterday</td>
</tr>' to contain text 'Hillary administrator yesterday'. (2)
1 spec in 0.283s.
>> 2 failures
另一个实验是使用 jQuery.text() 提取,然后我仍然有一个错误,因为所有的空格:
it('should find correct text in table with jQuery.text()', function () {
expect( $('#users').find('tbody tr').first().text() ).toContain('Darren testuser,customer today');
expect( $('#users').find('tbody tr').last().text() ).toContain('Hillary administrator yesterday');
});
给出了这个失败:
Testexample:: should find correct text in table with jQuery.text(): failed
Expected '
Darren
testuser,customer
today
' to contain 'Darren testuser,customer today'. (1)
Expected '
Hillary
administrator
yesterday
' to contain 'Hillary administrator yesterday'. (2)
1 spec in 0.291s.
>> 2 failures
Capybara (for ruby) 有一种方法来规范化文本,这样我总能看到我的 HTML 的合理文本表示。我将如何以简单的方式规范空白,以便我可以进行这样的验证?
(我不希望得到像“你不应该跨 html 元素进行测试”这样的答案......因为这是问题的前提。实际上我喜欢对多个元素进行断言:它可读、简短,并且可以快速查看内容正在工作。当我从外向内测试时也非常必要)