Closed nelsonic closed 6 years ago
render_footer
TestHere is a sample test you can add to your test/todo-app.test.js
file:
(if you feel confident in your TDD skills,
you could try
to write your own test/assertions...)
test.only('render_footer view using (elmish) HTML DOM functions', function (t) {
const model = {
todos: [
{ id: 1, title: "Learn Elm Architecture", done: true },
{ id: 2, title: "Build Todo List App", done: false },
{ id: 3, title: "Win the Internet!", done: false }
],
hash: '#/' // the "route" to display
};
// render_footer view and append it to the DOM inside the `test-app` node:
document.getElementById(id).appendChild(app.render_footer(model));
// todo-count should display 2 items left (still to be done):
const count = document.querySelectorAll('.todo-count')[0].textContent;
t.equal(count, "2", "count of items left: " + count);
// count number of footer <li> items:
t.equal(document.querySelectorAll('li').length, 3, "3 <li> in <footer>");
// check footer link text and href:
const link_text = ['All', 'Active', 'Completed'];
const hrefs = ['#/', '#/active', '#/completed'];
document.querySelectorAll('a').forEach(function (a, index) {
t.equal(item.textContent, model.todos[index].title,
"index #" + index + " <label> text: " + item.textContent)
});
// check for "Clear completed" button in footer:
const clear = document.querySelectorAll('.clear-completed')[0].textContent;
t.equal(clear, 'Clear completed', '<button> in <footer> "Clear completed"');
elmish.empty(document.getElementById(id)); // clear DOM ready for next test
t.end();
});
Todo App
<footer>
ElementReferring to the rendered HTML on http://todomvc.com/examples/vanillajs as our "guide": there is:
<footer>
element with<span>
element which containstext
node with: "{count}
item(s) left".<ul>
containing<li>
elements each with<a>
) which allow the "user" to filter which items appear in the<view>
.<button class="clear-completed">
which will Clear allCompleted
items when clicked.Dev Tools > Elements (inspector)
Copy-paste the rendered HTML
I "copy-pasted" of the rendered HTML from the Dev Tools:
Technical Acceptance Criteria
render_footer
returns a<footer>
DOM element which can be rendered directly to thedocument
or nested in another DOM element.<footer>
contains:<span class="todo-count">
which containstext
node with: "{count}
item(s) left". pseudocode:{model.todos.filter(done==false)}
item{model.todo.length > 1 ? 's' : '' }
left<ul>
containing 3<li>
with the following links (<a>
):All
:<a href="#/" class="selected">All</a>
class="selected"
should only appear on the selected menu/navigation item. this should be "driven" by themodel.hash
property.Active
:<a href="#/active">Active</a>
Completed
:<a href="#/completed">Completed</a>
<button class="clear-completed" style="display: block;">
will Clear allCompleted
items. pseudocode:var new_model = model.todos.filter(function(item) { return item.done === false})
This issue is part of the TodoMVC Feature List [Epic] #48