我正在尝试为一个与模型一起使用的Mixin做一个基本的"it works"测试.我假设单元测试Mixin的方法不应该在Mixin本身上完成,而是在混合了这个Mixin的通用Model类中完成.
假设这个第一个假设/策略有意义,那么这就是我尝试过的:
import DS from 'ember-data';
import Ember from 'ember';
import DictionaryManagerMixin from 'trainer/mixins/dictionary-manager';
module('DictionaryManagerMixin');
test('it works', function() {
var DictionaryManagerModel = DS.Model.extend(DictionaryManagerMixin, {
title: DS.attr('string')
});
var myStore = DS.Store.create();
var subject = myStore.createRecord(DictionaryManagerModel);
ok(subject);
});
Run Code Online (Sandbox Code Playgroud)
这不起作用,给出以下错误:
TypeError: Cannot read property 'lookup' of undefined
at null.<anonymous> (http://localhost:4200/assets/vendor.js:95610:35)
at Descriptor.ComputedPropertyPrototype.get (http://localhost:4200/assets/vendor.js:28466:25)
at get (http://localhost:4200/assets/vendor.js:33944:21)
at Ember.Object.extend.adapterFor (http://localhost:4200/assets/vendor.js:97005:27)
at Ember.Object.extend._generateId (http://localhost:4200/assets/vendor.js:95682:28)
at Ember.Object.extend.createRecord (http://localhost:4200/assets/vendor.js:95654:32)
at Object.eval (trainer/tests/unit/mixins/dictionary-manager-test.js:17:28)
at Object.Test.run (http://localhost:4200/assets/test-support.js:2632:18)
at http://localhost:4200/assets/test-support.js:2719:10
at process (http://localhost:4200/assets/test-support.js:2435:24)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
我已经意识到我的库项目最好是使用TypeScript转换为ES2015格式,然后我bili将其转换为其他格式(aka,UMD和CJS).这意味着我的主要tsconfig.json是:
{
"compilerOptions": {
"declaration": true,
"module": "es2015",
"target": "es2015",
"lib": ["es2015", "esnext.asynciterable", "es2015.reflect"],
"moduleResolution": "node",
"sourceMap": true,
"noImplicitAny": true,
"outDir": "./lib",
"removeComments": false,
"typeRoots": ["./node_modules/@types"]
},
"include": ["src/**/*"],
"exclude": ["node_modules", "**/*-spec.ts"]
}
Run Code Online (Sandbox Code Playgroud)
这就是我需要它来进行转换,但多年来我一直在享受我的摩卡测试运行ts-node:
ts-node - 需要ts-node/register'test/**/* - spec.ts'
我很快意识到我的所有基于TS的测试脚本现在都因为使用import语句等而崩溃,但我能够通过添加以下内容来解决这个问题:
TS_NODE_PROJECT ="tsconfig.test.json"ts-node --require ts-node/register'test/**/* - spec.ts'
替代方案tsconfig.test.json是:
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"target": "es5",
"lib": ["es2015"],
"declaration": false,
"noImplicitAny": false,
"removeComments": true,
"inlineSourceMap": true
},
"include": ["scripts/**/*.ts"]
} …Run Code Online (Sandbox Code Playgroud) 我很高兴在我的开发环境中工作,突然间我开始收到以下错误:
PHP致命错误:无法在第59行的[APP_ROOT] /vendor/composer/autoload_real.php中重新声明composerRequire7a368ac394ae1d2e857becf2a235ebaa()(先前在[APP_ROOT] /vendor/composer/autoload_real.php:56中声明)
我没有对作曲家依赖关系进行任何改动(尽管我认为我确实composer update在那个时间框架内做了某个地方,但没有对所使用的依赖关系/包进行任何更改,所以没有什么大的改变.
值得注意的是,当我在我的笔记本电脑上结帐回购时,我没有收到此错误,但如果我git clone是一个干净的回购,然后composer install在我的主要开发机器上,我会收到此错误.所以我假设它必须有一些特定于机器的起源,但我对这可能是什么的想法已经不多了.
任何帮助将不胜感激.
注意:我在OSX上运行PHP 5.3.28; 我的应用程序使用命名空间并且符合PSR0
另外值得注意的是,我正在运行PHPUnit 4.0.17并且在尝试运行单元测试的最初阶段触发错误(与单元测试无关).这是堆栈跟踪:
Run Code Online (Sandbox Code Playgroud)0.0009 636648 1. {main}() [APP_BASE]/vendor/phpunit/phpunit/phpunit:0 0.0465 1423664 2. PHPUnit_TextUI_Command::main() [APP_BASE]/vendor/phpunit/phpunit/phpunit:54 0.0465 1424280 3. PHPUnit_TextUI_Command->run() [APP_BASE]/vendor/phpunit/phpunit/src/TextUI/Command.php:132 0.0465 1424280 4. PHPUnit_TextUI_Command->handleArguments() [APP_BASE]/vendor/phpunit/phpunit/src/TextUI/Command.php:141 0.0674 2123344 5. PHPUnit_TextUI_Command->handleBootstrap() [APP_BASE]/vendor/phpunit/phpunit/src/TextUI/Command.php:638 0.0681 2139872 6. PHPUnit_Util_Fileloader::checkAndLoad() [APP_BASE]/vendor/phpunit/phpunit/src/TextUI/Command.php:808 0.0681 2140008 7. PHPUnit_Util_Fileloader::load() [APP_BASE]/vendor/phpunit/phpunit/src/Util/Fileloader.php:77 0.0774 2144176 8. include_once('[APP_BASE]/tests/test-loader.php') [APP_BASE]/vendor/phpunit/phpunit/src/Util/Fileloader.php:93 0.0775 2146736 9. include('[APP_BASE]/vendor/autoload.php') [APP_BASE]/tests/test-loader.php:2
我有一个回购,其中包含几个"微服务",我上传到AWS的Lambda.另外,我有几个共享库,我想在发送到AWS时打包.
因此我的目录结构如下:
/micro-service-1
/dist
package.json
index.js
/micro-service-2
/dist
package.json
index.js
/shared-component-1
/dist
package.json
component-name-1.js
/shared-component-2
/dist
package.json
component-name-2.js
Run Code Online (Sandbox Code Playgroud)
基本部署利用了方便的node-lambdanpm模块,但当我使用如下语句引用本地共享组件时:
var sharedService = require('../../shared-component-1/dist/index');
Run Code Online (Sandbox Code Playgroud)
这适用于node-lambda run命令,但node-lambda deploy删除了本地依赖项.可能是有道理的,因为我要在我的依赖项中的"根"目录下面,所以我想也许我会利用gulp来完成这项工作,但我对它很新,所以我可能会做一些愚蠢的事情.我的策略是:
gulp deploy依赖于本地DEPS任务npm build --production 到一个目录/local目录然后我会引用所有共享组件,如下所示:
var sharedService = require('local/component-name-1');
Run Code Online (Sandbox Code Playgroud)希望这能成为我想要实现的目标.这种策略有意义吗?我应该考虑更简单的方法吗?在"gulp speak"中有没有人有这样的例子?
我有以下路由器配置:
export default new Router({
mode: 'history',
routes: [
{
path: '/',
name: 'notselected',
component: PackageUnselected
},
{
path: '/package/:id',
children: [
{ path: 'meta', name: 'packageMeta', component: ViewPackageMeta },
{ path: 'readme', name: 'packageReadme', component: PackageReadme },
{ path: 'docs', name: 'packageDocs', component: PackageDocs },
{
path: 'playground',
name: 'packagePlayground',
component: PackagePlayground
}
]
},
{
path: '/about',
name: 'about',
component: About
},
{
path: '*',
redirect: '/'
}
]
});
Run Code Online (Sandbox Code Playgroud)
当我在根路由时,它正确地将路由名称标识为notselected. 当我路由到任何“/package/[id]”路由时,它会继续加载PackageUnselected组件而不是适当的路由(又名ViewPackageMeta、 …
我有一个在 EC2 上运行的 Wordpress 服务器,目前它只运行 HTTP,我宁愿避免在其上设置 SSL 的麻烦。我希望我可以选择 Cloudfront 来使用 HTTPS(使用 AWS 证书管理的 SSL 证书)为客户端提供所有请求,然后使用对源服务器的 HTTP 调用刷新它的缓存。这种类型的配置对于 Cloudflare 来说非常简单,但与传统 CDN 相比,它更像是一种反向代理。这是 Cloudfront 的合理架构吗?
我最初认为查看器协议策略的“行为”可以设置为“将 HTTP 重定向到 HTTPS”,但至少最初我似乎让页面通过 HTTPS 加载,但页面上的所有资产都无法加载,因为它们re 仍然指向 HTTP。可能这是一个不同的问题,但我遇到了一个问题。
仅供参考,这是我的行为仪表板:
而我的出身:
我有一个插件,需要将一组JS文件从其凉亭目录复制到Ember应用程序的根目录/dist(这是与服务工作者相关的范围规则).我想也许我可以使用treeForApp钩子,但是当我没有错误时,我也没有得到理想的结果.
该index.js方法是:
const Funnel = require('broccoli-funnel');
module.exports = {
name: 'ember-upup',
treeForApp: function(tree) {
tree = new Funnel(tree, { include:
[
'bower_components/upup/dist/upup.min.js',
'bower_components/upup/dist/upup.sw.min.js'
]});
return this._super.treeForApp.call(this, tree);
},
Run Code Online (Sandbox Code Playgroud)
注意:我想我可以通过简单地将javascript文件作为
index.jspostBuild钩子的一部分来复制来解决这个问题,但是当这个DOES将JS文件放入dist文件夹的根目录时,ember serve如果没有通过一个文件夹,它就不会被ember-cli服务它的构建管道.Stefan Penner现在已经指出该
dist目录供开发人员查看,但服务实际上是在tmp目录结构中完成的...这解释了为什么我的"hack"无效.
在使用最新版本的 Visual Studio Code 时,我正在编辑一个 JavaScript 文件,并且经常希望将输出记录到控制台。我创建了一个用户代码段以使其更易于自动完成,但我发现我在自动完成中获得的默认选项是下面突出显示的红色选项(而不是我的代码段中的绿色):
我想知道两件事:
我有一个主要用 Javascript 编写的 Lambda 函数的 AWS 步进函数/状态机(虽然一个是用 Java 编写的),我想更好地管理错误处理。
我对捕获错误条件然后转发到流程中的另一个状态没有问题。因此,例如,我的状态机中的以下状态定义将执行传递到NotifyOfError我能够通过电子邮件和短信适当地发送有关错误状态的状态。
Closure:
Type: Task
Resource: >-
arn:aws:lambda:#{AWS::Region}:#{AWS::AccountId}:function:xxx-services-${opt:stage}-transportClosure
Next: WaitForCloudWatch
Catch:
- ErrorEquals:
- "States.ALL"
ResultPath: "$.error-info"
Next: NotifyOfError
Run Code Online (Sandbox Code Playgroud)
但是,我不想将所有错误都交给这个状态,而是我希望以不同的方式处理一些错误。所以起初我认为如果我用给定的“名称”抛出一个 Javascript/Node 错误,那么这个名称将是我可以在ErrorEquals配置中分支的东西。例子:
catch(e) {
if (e.message.indexOf('something') !== -1) {
e.name = "SomethingError";
throw e;
}
Run Code Online (Sandbox Code Playgroud)
但很快意识到这个名字只是被添加到Causestep-function的部分而不是分支的东西。然后我尝试像这样扩展基本 Error 类:
export default class UndefinedAssignment extends Error {
constructor(e: Error) {
super(e.message);
this.stack = e.stack;
}
}
Run Code Online (Sandbox Code Playgroud)
但是抛出这个错误实际上什么也没做,这意味着当它出现在 Step Function 中时,错误的类型仍然只是“错误”:
"error-info": {
"Error": "Error",
"Cause": "{\"errorMessage\":\"Error: …Run Code Online (Sandbox Code Playgroud) 我很感兴趣是否有人找到了任何可以生成强类型映射/归约的良好类型实用程序。例如,如果我有以下数组:
const arr = [
{ id: 1, value: "foobar" },
{ id: 2, value: () => "hello world" }
] as const;
Run Code Online (Sandbox Code Playgroud)
假设我想要以下内容:
filter()对于运行时,这是对数组原型中内置函数的极其简单的使用:
const reduced = arr.filter(i => typeof i.value === "string");
Run Code Online (Sandbox Code Playgroud)
但由此返回的类型与之前没有变化。我想要的是让类型系统也响应简化的数组。为了做到这一点,我有一个函数isString,它在运行时测试给定的输入是否是字符串,但也返回布尔文字,以便类型系统可以推断返回的真/假值。
作为参考,该isString实用程序如下所示:
type IsString<T> = T extends string ? true : false;
function isString<T>(i: T) {
return (typeof i === "string") as IsString<T>;
}
Run Code Online (Sandbox Code Playgroud)
该实用程序适用于类型系统和运行时系统,因此天真地希望以下功能能够工作:
const reduced2 = arr.filter(i => isString(i));
Run Code Online (Sandbox Code Playgroud)
不幸的是,这仍然只返回相同的联合类型。如何让它发挥作用?
注意:我也想做其他映射缩减功能,但过滤操作对我来说是最紧迫的。
ember.js ×2
typescript ×2
autocomplete ×1
aws-lambda ×1
composer-php ×1
ember-cli ×1
ember-data ×1
gulp ×1
javascript ×1
mocha.js ×1
node.js ×1
npm ×1
php ×1
ts-node ×1
vue-router ×1
vue.js ×1
vuejs2 ×1