我对Jasmine测试非常陌生,我正在尝试测试一个指令,该指令可以处理鼠标事件(例如,鼠标向下,向上和移动)。我的问题是如何从Jasmine规范中将鼠标坐标传递给我的指令并模拟鼠标事件。我已经在这个主题上进行了很多搜索,但是除了这个例子,我没有找到任何其他例子,该例子没有像传递元素的坐标那样做任何事情。
以下是我尝试使用Angular中的TestBed配置编写测试的尝试:
import { Component, Directive, DebugElement } from "@angular/core";
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
import { By } from '@angular/platform-browser';
import { TestDirective } from "./test";
import { MyService } from "./my-service";
@Component({
template: `<div testDirec style="height:800px; width:500px; background-color:blue;"></div>`
})
class DummyComponent { }
export default function () {
describe('Directive: Zoom', () => {
let fixture: ComponentFixture<TestComponent>;
let debugEle: DebugElement[];
beforeAll(() => {
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
} …
Run Code Online (Sandbox Code Playgroud) 我有一个带有鼠标滚轮事件的指令,用于放大和缩小画布。我想知道如何为此类事件编写单元测试。我在网上找不到任何示例,有人能指出我正确的方向吗?
我的指令:
import { Directive, ElementRef, HostListener} from "@angular/core";
import { MyService } from "./my-service";
@Directive({
selector: "[testDirec]"
})
export class Test {
private initPointX: number;
private initPointY: number;
constructor(private ele: ElementRef,
private serviceInstance: MyService) {
}
@HostListener('mousewheel', ['$event'])
scroll(event: MouseEvent) {
console.log("Entered mouse wheel");
let wheelDelta = Math.max(-1, Math.min(1, (event.wheelDelta || -event.detail)));
if(wheelDelta > 0) {
factor = 0.5;
}else {
factor = 2.0;
}
this.initPointX = event.PageX;
this.initPointY = event.PageY;
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个函数triggerWave()
可以使画布上的点以波形动画。我正在使用d3.ease('quad-in')
缓动,我想用来在时间范围内d3.timer()
进行triggerWave()
函数调用200ms
。我很不幸在 d3.timer 上找到教程或示例。
triggerWave() {
//function logic
let count = 0;
let xScale = d3.scale.linear().range([1,2]); // want the value to change from 1 to 2.
let zScale = d3.scale.linear().domain([0, 200]); // 200 ms.
let value = xScale(d3.ease('quad-in')(zScale(count)));
if(count < 200){
count++;
d3.timer(() => triggerWave());
} else {
// do something
}
this.wave.next({currentFrame: value});
}
Run Code Online (Sandbox Code Playgroud)
当我d3.timer()
像上面那样调用时,该triggerWave()
函数被无限次调用并且永不停止。我想操纵或控制时间。就我而言,我希望为200ms
.
我如何理解如何使用该d3.timer()
功能?
我有一个键值对数组,其中每个键都有一个固定长度(即 2)的另一个数组作为值。如何将整个数组添加到 aMap()
而不只是Map.set(key, value)
为每一对做?
我知道在创建Map()
实例时,我可以将像数组一样的可迭代对象传递给它,例如:let x = new Map(arr);
但根据此处的文档,IE 11 不支持此方法。那么,谁能帮我解决一个替代实现。
归根结底,我只想能够使用字符串键访问这两个值。如果有另一种方法可以实现,请指导我。
这是示例:
我创建了一个键值映射数组,如下所示:
let arr = [
['ar', ['cl', 'bl']],
['bs', ['kl', 'ml']],
['cs', ['rk', 'uk']],
['da', ['mk', 'ak']]
];
let map = new Map(arr); // This isn't working.
Run Code Online (Sandbox Code Playgroud)
谢谢你。
假设我有一个json对象,它来自dataset
动态随机。我想搜索json并对该json对象的数值进行一些操作(如果有的话)。我可以通过Object
使用简单的 for..of循环遍历并获取整个键,但我不确定如何遍历对象中的每个键值对并返回数字。下面给出一个例子:
var obj = {
"a0": {
"count": 41,
"name": "Park",
},
"a1": {
"count": 52,
"name": "Greg",
},
"a2": {
"count": 150,
"name": "Sylvain",
},
"a3": {
"count": 276,
"name": "Macho",
},
"a4": {
"count": 36,
"name": "Mariam",
},
"a5": {
"count": 39,
"name": "Blanca",
}
}
Run Code Online (Sandbox Code Playgroud)
我可以循环遍历它如下:
for (let i of Object.keys(obj)) {
console.log(obj[i]);
}
Run Code Online (Sandbox Code Playgroud)
Object
除了 hasOwnProperty
和 之外keys
,我找不到任何其他属性,这些属性实际上可以为我提供值。我可以通过执行 简单地访问计数的值obj[i].count
,但我不知道它是否有计数。我正在寻找一种通用方法来获取值并检查其类型并将它们作为数组返回或对数字值进行一些操作。
编辑:我正在寻找在对象中提取具有数值的属性。
任何人都可以帮我解决这个问题。 …
javascript ×5
angular ×2
arrays ×1
d3.js ×1
dictionary ×1
jasmine ×1
json ×1
timer ×1
unit-testing ×1