- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
快速总结/tldr:
resolver
解析原始服务,Ember 的容器查找过程 + Ember-CLI 的模块解析器似乎不允许手动取消注册服务然后注册替换。 (我想做described here的方法,但是不行)ember generate service logger
export default Ember.Object.extend({
log: function(message){
console.log(message);
}
});
export function initialize(container, application) {
application.inject('route', 'loggerService', 'service:logger');
application.inject('controller', 'loggerService', 'service:logger');
}
loggerService
访问。 ,在应用程序 Controller 上的 Action 处理程序中:
<button id='do-something-button' {{action 'doSomething'}}>Do Something</button>
export default Ember.Controller.extend({
actions: {
doSomething: function(){
// access the injected service
this.loggerService.log('log something');
}
}
});
ember generate acceptance-test application
import Ember from 'ember';
import startApp from '../helpers/start-app';
var application;
var mockLoggerLogCalled;
module('Acceptance: Application', {
setup: function() {
application = startApp();
mockLoggerLogCalled = 0;
var mockLogger = Ember.Object.create({
log: function(m){
mockLoggerLogCalled = mockLoggerLogCalled + 1;
}
});
application.__container__.unregister('service:logger');
application.register('service:logger', mockLogger, {instantiate: false});
},
teardown: function() {
Ember.run(application, 'destroy');
}
});
test('application', function() {
visit('/');
click('#do-something-button');
andThen(function() {
equal(mockLoggerLogCalled, 1, 'log called once');
});
});
application.__container__.unregister('service:logger');
application.register('service:logger', mockLogger, {instantiate: false});
function resolve(container, normalizedName) {
// ...
var resolved = container.resolver(normalizedName) || container.registry[normalizedName];
// ...
}
resolve
方法检查
resolver
在检查其内部
registry
之前.
application.register
命令将我们的模拟服务注册到容器的
registry
, 但是当
resolve
被称为
resolver
的容器检查在它查询
registry
之前. Ember-CLI 使用自定义
resolver
将查找匹配到模块,这意味着它将始终解析原始模块而不使用新注册的模拟服务。解决方法看起来很糟糕,涉及修改
resolver
永远找不到原始服务的模块,这允许容器使用手动注册的模拟服务。
resolver
在测试中允许成功模拟服务。这通过允许解析器执行正常查找来工作,但是当查找我们的服务名称时,修改后的解析器就像它没有与该名称匹配的模块一样。这会导致
resolve
在容器中查找手动注册的模拟服务的方法。
var MockResolver = Resolver.extend({
resolveOther: function(parsedName) {
if (parsedName.fullName === "service:logger") {
return undefined;
} else {
return this._super(parsedName);
}
}
});
application = startApp({
Resolver: MockResolver
});
最佳答案
解决方案的简短版本:您注册的模拟服务必须具有与您尝试模拟的“真实”服务不同的 service:name 。
验收测试:
import Ember from 'ember';
import { module, test } from 'qunit';
import startApp from 'container-doubling/tests/helpers/start-app';
var application;
let speakerMock = Ember.Service.extend({
speak: function() {
console.log("Acceptance Mock!");
}
});
module('Acceptance | acceptance demo', {
beforeEach: function() {
application = startApp();
// the key here is that the registered service:name IS NOT the same as the real service you're trying to mock
// if you inject it as the same service:name, then the real one will take precedence and be loaded
application.register('service:mockSpeaker', speakerMock);
// this should look like your non-test injection, but with the service:name being that of the mock.
// this will make speakerService use your mock
application.inject('component', 'speakerService', 'service:mockSpeaker');
},
afterEach: function() {
Ember.run(application, 'destroy');
}
});
test('visit a route that will trigger usage of the mock service' , function(assert) {
visit('/');
andThen(function() {
assert.equal(currentURL(), '/');
});
});
import { moduleForComponent, test } from 'ember-qunit';
import hbs from 'htmlbars-inline-precompile';
import Ember from 'ember';
let speakerMock = Ember.Service.extend({
speak: function() {
console.log("Mock one!");
}
});
moduleForComponent('component-one', 'Integration | Component | component one', {
integration: true,
beforeEach: function() {
// ember 1.13
this.container.register('service:mockspeaker', speakerMock);
this.container.injection('component', 'speakerService', 'service:mockspeaker');
// ember 2.1
//this.container.registry.register('service:mockspeaker', speakerMock);
//this.container.registry.injection('component', 'speakerService', 'service:mockspeaker');
}
});
test('it renders', function(assert) {
assert.expect(1);
this.render(hbs`{{component-one}}`);
assert.ok(true);
});
关于ember.js - 如何在验收测试中模拟 Ember-CLI 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28422375/
我有一些验收测试允许 Windows 服务通过 smtp 发送电子邮件,有没有人知道检查电子邮件是否已通过代码接收的好方法,目前正在发送到 Exchange 邮箱? 问候 伊恩 最佳答案 Micros
我已阅读有关 Jest 的文档。然而,这似乎意味着对各个组件进行单元测试。 如何测试组件集成,或验收测试使用 React JS(使用 Flux)编写的 Web 应用程序的一项功能。 例如,在电子商务
我正在寻求一些帮助,以使用 Capybara 测试框架对 Selectize jQuery 插件进行验收测试。 我们在 Selectize 布局其生成的 HTML 的方式上遇到问题,选择下拉列表和下拉
我正在尝试运行空主体的验收测试: class ContactCept { public function frontpageWorks(AcceptanceTester $I) {
出于性能原因,我有一个启用了二级数据缓存的 JPA/Hibernate/Spring/Tomcat Web 应用程序。缓存的工作非常好! 我还有一个 Cucumber 测试套件,它将一些测试数据直接添
集成/功能/验收测试本质上难以维护,原因有很多:它们需要很长时间才能运行,难以始终保持绿色,可能看似随机失败,调试起来很麻烦等等。但是,它们可以是无价的,如果有人设法拥有可靠的非单元测试套件。 拥有这
我有一个 Java 桌面应用程序,它的主要组件是使用 Java OpenGL (JOGL) 编写的。当谈到为此编写自动验收测试时,我真的不确定如何编写它们而不是非常脆弱。使用 Swing(和 HTML
我可以访问 url 并创建 session : http://localhost:4444/wd/hub/static/resource/hub.html 但是当我执行 ./codecept run我
我正在尝试创建一些旨在构建我的 javascript 应用程序的容器。 这是我需要做的: 安装我的依赖项 开始我的单元测试 构建我的项目 开始我的验收测试 这是我的项目 dockerfile : FR
使用 Codeception 为我们的自定义(使用 Symfony 组件和 Doctrine)框架编写验收测试。我们有一组实用方法,由我们的 Phpunit 测试单独使用,用于创建各种实体进行测试。这
我需要一个 emberJs 验收测试,以便能够滚动到页面中的某个点,然后才对页面断言。 这两个功能, Ember.$('body').scrollTop(1000); window.scroll(0,
我正在 EmberJS 中开发一个项目,该项目有一组验收测试(带有 EmberJS 帮助程序的 qUnit)。现在,我正在尝试尽可能优化这些测试,因为每次运行等待 10 分钟并不好。 我们实际上需要等
有没有人可以清楚地定义这些级别的测试,因为我发现在进行 TDD 或单元测试时很难区分。请是否有人可以详细说明如何、何时实现这些? 最佳答案 简要说明: 单元测试 - 对每一段代码进行单元测试。想想每个
我可以使用 websockets 作为测试运行程序类型机制来在单页 ajax 应用程序上运行验收测试吗?我认为它可以通过加载单个应用程序页面然后加载另一个页面来工作,这两个页面都使用 websocke
我有一个带有 letsencrypt ssl 证书的网站。当我针对它运行代码接收验收测试时,测试会停止,直到我按下 ctrl+z。当我对非 ssl 站点运行相同的测试时,没有问题。 这是我在 acce
我是第一次在验收测试我的Ember应用程序时开始。 因此,我从登录开始,它是这样的: 测试/接受/登录-test.js: import { test } from "qunit"; import mo
我想在 symfony 2 项目中使用 Codeception 编写一些验收测试。我不想使用 PhpBrowser,而是使用 symfony envoriment。 原始acceptance.suit
我有一个包含 Umbrella 应用程序的项目。伞下的子应用程序由核心/主/域应用程序、交付应用程序、数据库支持的存储库和内存存储库组成。 我想写一些集成测试来发送 http 请求并检查数据库中的变化
我正在尝试使用 Maven 构建此 ( https://github.com/wakaleo/game-of-life ) Java 项目,并使用它运行验收测试。但它显示测试结果为 run 0:我遵循
可以使用 Robolectric 编写 Android 验收测试吗?它似乎仅被归类为单元测试框架。 为什么不能将其归类为验收或“端到端”测试框架? (它可以适应那个目的吗?) 最佳答案 我认为这可能有
我是一名优秀的程序员,十分优秀!