我正在尝试使用VS Code创建在OSX上运行的ASP.NET Core MVC测试应用程序.我在访问默认的Home/index(或我尝试过的任何其他视图)时遇到"查找未找到"异常.
这是启动配置
public void Configure(IApplicationBuilder app) {
// use for development
app.UseDeveloperExceptionPage();
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseMvc( routes => {
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}"
);
});
}
Run Code Online (Sandbox Code Playgroud)
我已经定义了视图Views/Home/index.cshtml,并且我在project.json中包含了以下包
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0-rc2-3002702",
"type": "platform"
},
"Microsoft.AspNetCore.Razor.Tools" : "1.0.0-preview1-final",
"Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
"Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Routing": "1.0.0-rc2-final"
},
Run Code Online (Sandbox Code Playgroud)
最后,这是我得到的例外.
System.InvalidOperationException: The view 'Index' was not found. The following locations were searched:
/Views/Home/Index.cshtml
/Views/Shared/Index.cshtml
at Microsoft.AspNetCore.Mvc.ViewEngines.ViewEngineResult.EnsureSuccessful(IEnumerable`1 originalLocations)
at Microsoft.AspNetCore.Mvc.ViewResult.<ExecuteResultAsync>d__26.MoveNext()
--- End of …Run Code Online (Sandbox Code Playgroud) 我正在尝试在单元测试中模拟keydown事件(angular2/TypeScript).我并不总是有可用的DebugElement,所以我试图在本机元素上发出事件.我遇到的问题是如何在创建KeyboardEvent时定义keyCode.keyCode未定义为KeyboardEventInit定义的一部分,而在KeyboardEvent本身上,它仅作为只读属性公开.
只需添加一个keyCode属性(并将obj类型设置为)也不起作用.
let elm = <HTMLElement>content.nativeElement;
let ev = new KeyboardEvent('keydown', {
code: '123',
//keyCode: 345,
key: 'a',
});
elm.dispatchEvent(ev);
Run Code Online (Sandbox Code Playgroud)
有什么建议 ?
编辑:根据mdn链接,不推荐使用keyCode,不应使用,而应使用"code". https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
如何检测子组件的路由更改?这是我尝试过的,但我只看到app组件跟踪路由更改.我希望能够检测到url在MetaDetailView组件中从#/ meta/a/b/c变为#/ meta/a/b/c/d的时间.
@RouteConfig([
{ path: '/', name: 'Home', redirectTo: ['Meta']},
{ path: '/meta/...', name: 'Meta', component: MetaMainComponent, useAsDefault: true},
...other routes...,
])
export class AppComponent {
constructor(private _router: Router) {
_router.subscribe( (url) => console.log("app.url = " + url));
}
}
@RouteConfig([
{ path: '/*other', name: 'Detail', component: MetaDetailViewComponent, useAsDefault: true},
])
export class MetaMainComponent {
constructor(private _router: Router) {
_router.subscribe( (url) => console.log("metamain.url = " + url));
console.log("MetaMainComponent")
}
}
export class MetaDetailViewComponent {
constructor(private _router: Router) {
_router.subscribe( …Run Code Online (Sandbox Code Playgroud) 我创建了一个虚拟列表组件,我只在其中渲染可见线。创建单元测试时,我可以在添加元素的同时测试视图,但是当我删除或更改元素时,“fixture.debugElement”仍会返回先前的计数。
我创建了这个显示问题的小测试组件
组件
class TestComponent {
@ViewChild('view') view: ElementRef;
constructor(public ngRenderer: Renderer) {
}
public add(text: string): void {
let parentelm = this.view.nativeElement;
let element = this.ngRenderer.createElement(parentelm, 'div');
this.ngRenderer.setText(element, text);
}
public remove(index: number): void {
let elm: HTMLElement = this.view.nativeElement;
let child = elm.children[index];
elm.removeChild(child);
}
}
Run Code Online (Sandbox Code Playgroud)
和测试
describe('test component', () => {
let fixture: ComponentFixture<TestComponent>;
let component: TestComponent;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [TestComponent],
});
fixture = TestBed.createComponent(TestComponent);
component = fixture.componentInstance;
});
it('add and remove divs', () => …Run Code Online (Sandbox Code Playgroud) 我是 iOS 开发的新手。按照教程,我使用 SwiftUI 创建了一个简单的计算器。
我的 iPad 上有一个键盘,我希望能够使用键盘输入值。
如何在 SwiftUI 应用程序(没有文本字段)中捕获和处理硬件键盘事件?我尝试在 SceneDelegate (UIResponder) 上使用 keyCommands,如下所示,但这对我不起作用。只要我按下 iPad 上的任意键,我就会在 XCode 跟踪视图中看到“与守护进程的连接已失效”。
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
override var canBecomeFirstResponder: Bool {
return true;
}
override var keyCommands: [UIKeyCommand]? {
return [
UIKeyCommand(input: "a", modifierFlags: [], action: #selector(test)),
UIKeyCommand(input: UIKeyCommand.inputLeftArrow, modifierFlags: [], action: #selector(test))
]
}
@objc func test(_ sender: UIKeyCommand) {
print("test was pressed")
}
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑:正如@Asperi 提到的,这是正确的。我需要使用视图/控件,而不是形状
当我将鼠标悬停在元素上时,我试图将光标更改为指针。我看了这个,但它对我不起作用 SwiftUI System Cursor
这是我的代码
struct CursorTestView: View {
@State private var hover: Bool = false
var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 5)
.fill(hover ? Color.green : Color.blue)
.frame(width: 100, height: 50)
.onHover(perform: { hovering in
self.hover = hovering
if (hover) {
NSCursor.pointingHand.push()
} else {
NSCursor.pop()
}
})
}
.frame(width: 400, height: 400, alignment: .center)
.background(Color.yellow.opacity(0.2))
}
}
Run Code Online (Sandbox Code Playgroud)
对我所缺少的有什么建议吗?
谢谢
我正在尝试使用 monoMac 和 Xamarin Studio 处理 NSTextField 的 keyDown 事件。
我创建了一个 NSTextFieldDelegate 派生类,并将编辑器委托设置为此类的一个实例。但是,我只看到调用了 Changed 方法,而不是 DoCommandBySelector
class TextPathDelegate : NSTextFieldDelegate {
public override void Changed(NSNotification notification)
{
Console.WriteLine("changed");
}
public override void DidChangeValue(string forKey)
{
Console.WriteLine("didchange = {0}", forKey);
}
public override void WillChangeValue(string forKey)
{
Console.WriteLine("willchange = {0}", forKey);
}
public override bool DoCommandBySelector(NSControl control, NSTextView textView, MonoMac.ObjCRuntime.Selector commandSelector)
{
Console.WriteLine("DoCommandBySelector = {0}", commandSelector.ToString());
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
知道我可能会错过什么吗?
编辑 2: 我刚刚注意到,如果我使用箭头键和向上/向下翻页,则会调用 DoCommandBySelector。仍然无法捕捉到 keydown 事件
Edit-1: 我尝试使用 Xamarin.mac 制作一个小项目,只有 …
angular ×3
swiftui ×2
asp.net-core ×1
cocoa ×1
javascript ×1
macos ×1
monomac ×1
uikeycommand ×1
unit-testing ×1
xamarin ×1