可以在模拟的$ httpBackend中覆盖或重新定义模拟响应吗?
我有这样的测试:
beforeEach(inject(function ($rootScope, $controller, _$httpBackend_) {
$httpBackend = _$httpBackend_;
//Fake Backend
$httpBackend.when('GET', '/myUrl').respond({}); //Empty data from server
...some more fake url responses...
}
Run Code Online (Sandbox Code Playgroud)
这对于大多数情况都很好,但是我很少有测试,我需要为同一个URL返回不同的东西.但似乎一旦定义了when().respond(),我就不能在这样的代码中改变它:
单个特定测试中的不同响应:
it('should work', inject(function($controller){
$httpBackend.when('GET', '/myUrl').respond({'some':'very different value with long text'})
//Create controller
//Call the url
//expect that {'some':'very different value with long text'} is returned
//but instead I get the response defined in beforeEach
}));
Run Code Online (Sandbox Code Playgroud)
我怎么做?我的代码现在是不可测试的:(
我使用Visual Studio 2015与Typescript 1.5.4和Resharper 9
这是一个错误的场景:
这很烦人,因为它在Git中产生了太多的噪音,它阻止我直接在浏览器中调试typescript文件.(因为缺少.js.map文件)
当然,期望的行为是应该在保存时编译唯一更改的.ts文件.怎么做?
似乎R#与此无关,因为它会在R#禁用的情况下继续发生.
------------- -------------更新
我试图更新到Typescript版本1.6.PATH变量指向C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.4\所以我已经更新指向1.6
所以,当我现在打字tsc -v时说message TS6029: Version 1.6.2
但由于历史原因(我工作的项目大约2年),我必须1.4在VisualStudio中使用版本.所以在.csproj中<TypeScriptToolsVersion>1.4</TypeScriptToolsVersion>
在此更改后,compile on safe完全停止工作.
现在我必须重建整个解决方案:(
我的 CSP 头看起来像这样(实际上,它只是与加载图像相关的部分),这应该是有效的。但是 Chrome 抱怨“内容安全策略指令‘img-src’的源列表包含一个无效的源:‘data:image/svg+xml’。它将被忽略。”
img-src data:image/svg+xml 'self' https://stats.g.doubleclick.net/r/collect https://www.facebook.com/tr/ https://www.google-analytics.com/r/collect data:image/svg+xml;
Run Code Online (Sandbox Code Playgroud)
它应该是有效的,我在网上的示例中找到了它,但它不起作用。例如,这里建议https://security.stackexchange.com/questions/94993/is-include-the-data-scheme-in-your-content-security-policy-safe/95011#95011
请提供有效且有效的示例,我迷失在这个迷宫中。
我需要对以异步方式加载数据的方法进行单元测试.我可以轻松地运行异步测试方法
[Test]
public async Task My_test_async() {
// ... await something
}
Run Code Online (Sandbox Code Playgroud)
但我也希望该Setup方法是异步的.因为它在模拟的Db中准备了一些数据.这个模拟的db当然也是异步的(它必须实现相同的接口).
所以我的设置方法如下所示:
[Setup]
public async Task Setup() {
var db = new InMemoryDbContext();
// ... add sample data in db context
// ... then save them
await db.SaveChangesAsync();
}
Run Code Online (Sandbox Code Playgroud)
我正在使用NUnit版本3.0.1,NUnitTestAdapter.WithFramework版本2.0.0和VisualStudio 2015与Resharper 9.2
可能的解决方法
我可以解决这个问题,但两种解决方案都不是很好.
解决方法#1
重构Setup()方法是私有的,从中删除[Setup]属性,并在每个测试方法中调用它.这样就可以等待,测试就会执行.
解决方法#2
或者我可以使安装程序同步,并将异步代码包装在内Task.Run().Result,就像这样
var r = Task.Run(() => db.SaveChangesAsync()).Result;
Run Code Online (Sandbox Code Playgroud)
但这两种解决方法都很难看.
有谁知道更好的解决方案?
有没有办法从组件JS文件中访问组件初始化的内部内容.我基本上想要获得收益.
例如,假设我有一个使用此模板的hbs:
{{#my-component}}
<span>bla bla {{foo}}</span>
{{/my-component}}
Run Code Online (Sandbox Code Playgroud)
然后我想在我的组件中访问上面的跨度,如下面的示例所示,在theInnerHtml中,我想获得初始化组件中的内容.
import Ember from 'ember';
export default Ember.Component.extend({
didInsertElement() {
let theInnerHtml = this.get('innerHTML'); // "<span>bla bla {{foo}}</span>"
}
});
Run Code Online (Sandbox Code Playgroud) 我有一个托管在Docker中的前端Web应用程序.后端已经存在,但它有"自定义IP"地址,所以我不得不更新我的本地/ etc/hosts文件来访问它.因此,从我的本地机器,我可以毫无问题地访问后端API.
但问题是Docker莫名其妙地无法解析这个"自定义IP",即使主机在容器中写入(image?)/ etc/hosts文件.
当Docker容器启动时,我看到了这个错误
$ docker run media-saturn:dev
2016/05/11 07:26:46 [emerg] 1#1: host not found in upstream "my-server-address.com" in /etc/nginx/sites/ms.dev.my-company.com:36
nginx: [emerg] host not found in upstream "my-server-address.com" in /etc/nginx/sites/ms.dev.my-company.com:36
Run Code Online (Sandbox Code Playgroud)
我在Dockerfile中通过命令更新/ etc/hosts文件,就像这样
# install wget
RUN apt-get update \
&& apt-get install -y wget \
&& rm -rf /var/lib/apt/lists/*
# The trick is to add the hostname on the same line as you use it, otherwise the hosts file will get reset, since every RUN command starts a new …Run Code Online (Sandbox Code Playgroud) 我对业力v1.4有问题。测试框架。我所有的单元测试现在都因错误而失败Cannot read property 'assertPresent' of undefined at resetFakeAsyncZone
我已经在寻找解决方案并对其进行了测试,但不幸的是,没有任何帮助。解决方案建议我应该更改test.js文件中的导入顺序。我已经做到了。
这是我正在使用的建议顺序,但仍然失败:
import 'zone.js/dist/zone.js'; // 1st
import 'zone.js/dist/async-test'; // 2nd
import 'zone.js/dist/fake-async-test'; // 3rd
import 'zone.js/dist/long-stack-trace-zone'; // 4th
import 'zone.js/dist/sync-test'; // 5th
import 'zone.js/dist/proxy.js'; // 6th
import 'zone.js/dist/jasmine-patch'; // 7th
Run Code Online (Sandbox Code Playgroud)
PS:我使用的是VS Code,它现在在保存文件时自动对导入进行排序,从而更改了我的自定义导入顺序,在这种情况下,这非常烦人。我不知道如何仅针对特定文件禁用它,因此我必须在记事本中编辑test.js文件。
Angular 11 内置了对i18n的支持。angular.json当在配置文件中配置时,这非常有效。我正在开发一个大型项目,其中单个 monorepo 中有多个子项目。我们使用 Nrwl NXworkspace.json来配置项目。问题是workspace.jsoni18n 有不同的语法,并且它似乎与angular.json. 另外,NX 文档关于 i18n 的内容非常简短(几乎不存在)。
结果是目前我的应用程序根本没有本地化。
有什么想法可以让 i18n 在 NRWL NX 中工作吗?
先感谢您。
当我创建一个记录const myRecord = this.store.createRecord('myType', myObject),然后myRecord.save()请求通过适配器发送到服务器.数据已成功保存,服务器将所有数据返回给客户端.它通过序列化器返回,通过normalize()钩子.
问题是Ember不会myRecord使用从服务器返回的属性更新对象,例如id或version...
当我刷新页面时,所有属性都在那里(当然).
我有更新记录的类似问题.我的应用程序中的每条记录都有一个版本属性,由服务器检查.每次保存时都会增加版本.这是为了数据安全.问题是,当我尝试多次更新记录时,只有第一次尝试成功.原因是version请求从服务器返回后未更新.(是的,服务器返回更新版本)
这对我来说是一个令人惊讶的行为,在我看来,这似乎是这里建议的预期功能 - https://github.com/ebryn/ember-model/issues/265.(但该帖子是从2013年开始的,建议的解决方案对我不起作用).
有任何想法吗?
对于completenes,这是相关代码(简化和重命名)
基于myModel
export default Ember.Model.extend({
typedId: attr('string') // this serves as an ID
version: attr('string'),
name: attr('string'),
markup: attr('number'),
});
Run Code Online (Sandbox Code Playgroud)
myAdapter
RESTAdapter.extend({
createRecord(store, type, snapshot) {
// call to serializer
const serializedData = this.serialize(snapshot, options);
const url = 'http://some_internal_api_url';
// this returns a promise
const result = this.ajax(url, 'POST', serializedData);
return result;
}, …Run Code Online (Sandbox Code Playgroud) angular ×2
ember.js ×2
unit-testing ×2
angularjs ×1
asynchronous ×1
c# ×1
compilation ×1
docker ×1
dockerfile ×1
ember-data ×1
javascript ×1
karma-runner ×1
mocking ×1
nginx ×1
nrwl ×1
nrwl-nx ×1
nunit ×1
testing ×1
typescript ×1
zone.js ×1