The font has no glyph for that character (you can see it from the “missing symbol” glyph or from the message in the log file).
Use a font that provides it. Here I use Libertinus Serif.
\documentclass{article}
\usepackage{fontspec}
\usepackage{newunicodechar}
\setmainfont{Lato}
\newfontfamily{\libertinus}{Libertinus Serif} % a font that has ✔
\newfontfamily{\iosevka}{Iosevka}
\newunicodechar{✔}{%
\begingroup
\iffontchar\font`✔ \else \libertinus\fi ✔%
\endgroup
}
\begin{document}
This is a test: ✔
\iosevka
This is a test: ✔
\end{document}
You might want to have the symbol not to change based on the current conditions. Then use
\documentclass{article}
\usepackage{fontspec}
\usepackage{newunicodechar}
\setmainfont{Lato}
\newfontface{\libertinus}{Libertinus Serif} % a font that has ✔
\newfontfamily{\iosevka}{Iosevka}
\newunicodechar{✔}{%
\begingroup
\normalfont\libertinus ✔%
\endgroup
}
\begin{document}
This is a test: ✔
\iosevka
This is a test: ✔
\end{document}
I use the Iosevka font just to see the difference in the two situations.
Missing character: There is no ✔ in font Lato Regular/OT
, so you'll have to find a font which contains that glyph.