我已经习惯了提出的异步/等待语法,并且有一些不直观的行为.在"async"函数中,我可以在console.log中找到正确的字符串.但是,当我尝试返回该字符串时,它会返回一个promise.
检查此条目:async/await隐式返回promise?,很明显,任何"async function()"都会返回一个promise,而不是一个值.没关系.但是,您如何获得价值?如果唯一的答案是"回调",那很好 - 但我希望可能会有更优雅的东西.
// src
// ==========================================
require("babel-polyfill");
var bcrypt = require('bcrypt');
var saltAndHash = function(password){
var hash;
return new Promise(function(resolve, reject){
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash(password, salt, function(err, hash) {
resolve(hash);
});
});
})
}
var makeHash = async function(password){
var hash = await saltAndHash(password);
console.log("inside makeHash", hash);
return(hash);
}
// from test suite
// ==========================================
describe('Bcrypt Hashing', function(){
it('should generate a hash', function(){
var hash = makeHash('password');
console.log("inside test: ", hash);
should.exist(hash);
})
}) …Run Code Online (Sandbox Code Playgroud) 我正在致力于将一堆打字稿类型扩展到实用程序库中,作为个人“我真的理解打字稿吗?” 项目。
我只是在弄清楚如何对这个该死的东西进行单元测试时遇到了很多麻烦。
问题是我想测试当我将错误的类型传递给调用类型的函数时,TSC 是否会捕获它。确实如此。太棒了。但这有一个小小的缺陷,因为我使用的单元测试库(Jest)会抛出一个错误(所需的行为),然后拒绝运行测试套件的其余部分,因为它抛出了一个错误。我什至不能使用“将抛出错误”,因为它不是 Javascript 错误,而是 Typescript 错误。
这是我到目前为止的代码。我正在使用 Jest,但我的解决方案不需要特定于 Jest,我有一种有趣的感觉,我可能需要某种专门的测试库。
// src/Either/Either.ts
export type Either<Base, Either, Or> = (Base & Either) | (Base & Or);
Run Code Online (Sandbox Code Playgroud)
// src/either/Either.spec.ts
import { Either } from "./Either";
interface Pet {
name: string;
}
interface Dog {
says: "awoo" | "ruff" | "yip" | "bork" | "bark" | "grr";
willFetch: true;
}
interface Cat {
says: "meow" | "hiss";
willFetch: false;
}
describe("Either<Base, Either, Or>", () => {
it("allows one extension OR the …Run Code Online (Sandbox Code Playgroud) 我目前正在处理一个遗留的 Vue 项目。我们正在使用带有选项 API 的 Vue 2.xw/Typescript。
我想提出切换到 Vue 组件 API 的案例,到目前为止,我认为这是一个非常引人注目的案例 - 除了一个缺点。
那就是——我们现有的测试失败了。具体来说,这是因为两个原因:
例子:
// FIXME: This test fails because Vue Test Utils .setData does not work
// with the new composition API.
it("renders by default", async () => {
await wrapper.setData({
crosshairCoordinates: [{ x: 0, y: 0 }],
});
expect(wrapper.findAllComponents(ChartTooltip).length)
.toBe(1); // -> expected 1, recieved: 0
});
Run Code Online (Sandbox Code Playgroud)
unit-testing vue.js vue-test-utils vuejs3 vue-composition-api
我试图找出在表格中呈现子行的最佳方式。
我正在开发本质上是桌子+手风琴的东西。也就是说,当您单击表格以显示该条目的更多详细信息时,它会添加更多行。
我的表位于 Researcher Groups 组件中,该组件有一个子组件:“app-researcher-group-entry (ResearcherGroupEntry)。
我正在使用 Vue-Material,但如果我使用普通的 .
无论如何,我的结构有点像:
// ResearcherGroups.vue
<template>
<md-table>
<md-table-row>
<md-table-head></md-table-head>
<md-table-head>Researcher</md-table-head>
<md-table-head>Type</md-table-head>
<md-table-head></md-table-head>
<md-table-head></md-table-head>
</md-table-row>
<app-researcher-group-entry v-for="(group, index) in researcherGroups" :key="group.label" :groupData="group" :indexValue="index"></app-researcher-group-entry>
</md-table>
</template>
Run Code Online (Sandbox Code Playgroud)
在 ResearcherGroupEntry.vue 中:
<template>
<md-table-row>
<md-table-cell>
<md-button class="md-icon-button md-primary" @click="toggleExpansion">
<md-icon v-if="expanded">keyboard_arrow_down</md-icon>
<md-icon v-else>keyboard_arrow_right</md-icon>
</md-button>
<md-button @click="toggleExpansion" class="index-icon md-icon-button md-raised md-primary">{{indexValue + 1}}</md-button>
</md-table-cell>
<md-table-cell>{{groupData.label}}</md-table-cell>
<md-table-cell>Group</md-table-cell>
<md-table-cell>
<md-button @click="openTab" class="md-primary">
<md-icon>add_box</md-icon>
Add Client / Client Type
</md-button>
</md-table-cell>
<md-table-cell>
<md-button class="md-primary">
<md-icon>settings</md-icon>
Settings
</md-button>
</md-table-cell>
<app-add-client-to-group-tab :indexValue="indexValue" :groupData="groupData" …Run Code Online (Sandbox Code Playgroud) 我很难理解这一点 - 我正在使用继承的遗留代码,虽然这看起来应该非常简单,但事实并非如此。
在此 app/pods/application/route.js 中,有一个由服务器抓取的“welcome pack”对象,作为该对象的一部分,在welcome-pack 服务上调用了一个 setWp() 方法,该方法设置“wp”相同服务的价值。(是的,我知道您可能可以使用“this.wp.set('wp',welcomePack)”直接在服务上设置值,但正如我所说:继承了遗留代码。)重点是,这应该会触发价值。我的 wp.wp 观察者正在触发,但不是我基于 wp.wp 的计算结果。有什么线索吗?
// app/pods/application/route.js
wp: inject('welcome-pack'),
model(){
return this.store.findAll('welcome-pack').then((welcomePack) => {
this.wp.setWp(welcomePack);
})
}
// app/pods/welcome-pack/service.js
import Service from '@ember/service';
export default Service.extend({
wp: null,
setWp(wp){ // <-- called when the model loads from the ajax request
this.set('wp', wp)
}
})
// app/pods/application/controller.js
import Controller from "@ember/controller";
import { inject } from "@ember/service";
import { computed, observer } from "@ember/object";
export default Controller.extend({
wp: inject("welcome-pack"),
init(){
console.log('this.wp', this.wp) …Run Code Online (Sandbox Code Playgroud) unit-testing ×2
vue.js ×2
async-await ×1
ember.js ×1
html-table ×1
javascript ×1
typescript ×1
vue-material ×1
vuejs2 ×1
vuejs3 ×1