새로운 프로젝트에서 모범 사례를 구현하려고 시도하면서 MVC 태그 도우미로 단위 테스팅을 얼마나 확장 할 수 있는지 알게되었습니다. 이 예에서는 MVC documentation의 태그 도우미 섹션에서 가져온 매우 간단한 도우미가 있으므로 지금은 <email mail-to="Support"></email>
입니다.ASP.NET 코어에서 태그 테스팅 태그 도우미 - 태그 채우기 공용 속성
실제 코드는 다음과 같습니다. 예상대로
public class EmailTagHelper : TagHelper
{
private const string EmailDomain = "contoso.com";
public string MailTo { get; set; }
public override void Process(TagHelperContext ctx, TagHelperOutput output)
{
output.TagName = "a";
var addr = $"{MailTo}@{EmailDomain}";
output.Attributes.SetAttribute("href", $"mailto:{addr}");
output.Content.SetContent(addr);
}
}
결과 HTML이며 코드를 실행할 때 내가 브레이크 포인트를 설정하면 나는 파스칼의 경우 mail-to
올바르게 C# 클래스 내부의 낙타 경우 MailTo
을 채우는 것을 볼 수 있습니다. 이제
I가 다음과 같은 단위 테스트 :
[TestMethod]
public void EmailTagHelper_GeneratesExpectedHtml()
{
var emailHelper = new EmailTagHelper();
var ctx = new TagHelperContext(new TagHelperAttributeList
{
{"mail-to", "Support"}
}, new Dictionary<object, object>(), Guid.NewGuid().ToString("N"));
var output = new TagHelperOutput("email",
new TagHelperAttributeList(), (useCachedResult, htmlEncoder) =>
{
var tagHelperContent = new DefaultTagHelperContent();
tagHelperContent.SetContent(string.Empty);
return Task.FromResult<TagHelperContent>(tagHelperContent);
});
emailHelper.Process(ctx, output);
Assert.AreEqual("a", output.TagName);
Assert.AreEqual("mailto:[email protected]", output.Attributes["href"].Value);
}
첫 번째 어설 통과 내가 태그 헬퍼 클래스 내부에 브레이크 포인트 만약 내가 속성은 일반적으로 응용 프로그램을 실행할 때 전달되는 것과 일치하는 것을 볼 수있다 , 어떤 이유로 파스칼과 낙타의 매핑을 MailTo
이 테스트 중에 발생하지 않습니다.
나는 Github에있는 MVC Tag Helper Unit Tests의 소스 코드를 기반으로 작업하고 있지만 뭔가 빠뜨린 것 같습니다.
어떤 조언이나 내가 모든 정직에서 그것은 단지 내가 내려다 오전 뉘앙스의 희망 그렇다면 :(경찰 아웃 답변 약간 것 같아 내 테스트에 emailHelper.MailTo
을 설정해야 할 것입니다!
태그 도우미가 실제로 실행되도록 허용하기 전에 Razor가 어떻게 든 참여하고 매핑을 수행한다는 것이 나의 의구심이었습니다. 그들은 IMO를 조금 성가 시게했지만 왜 그걸했는지 알 수 있습니다. 내가 어떻게 이런 일이 일어나고 테스트 버전을 구현할 수 있는지 알아봐야 할 것입니다. 입력, 모두 주셔서 감사합니다! 적어도 오른쪽 라인을 따라 작업하고 있었다. :) –
'emailHelper.Init (ctx) '를 호출하는 것이 이것을 처리 할 수 있다고 생각 했었지만이 TagHelper 클래스 외부에서 완전히 처리 된 것으로 보인다. 어쩐지. –
@ JakHammond 네, 그렇습니다. OP에서 링크 된 테스트를 검토하는 것이 좋습니다. 나는 그들이 뷰 컨텍스트를 생성하고 도우미에게 할당하여 원하는 것을 할 수 있다는 것을 알게되었습니다. 이 테스트를 확인하십시오. https://github.com/aspnet/Mvc/blob/dev/test/Microsoft.AspNetCore.Mvc.TagHelpers.Test/TextAreaTagHelperTest.cs#L150 – Nkosi