人们如何编写涉及触发一系列UI事件的角度e2e测试?场景的异步性质似乎使其变得困难.
详细信息:我正在为一个具有大量密钥处理功能的应用程序编写测试,以帮助加快编辑专用表单的速度.我已将键盘扩展拉到了方案dsl(见下文),但只有测试的第一个关键事件才有效.即
keyboard().keydown(null, 'keydown', 40, false, true); // ctrl-down
expect(element('*:focus').text()).toEqual('00:04');
keyboard().keydown(null, 'keydown', 40, false, true); // ctrl-down
expect(element('*:focus').text()).toEqual(''); // but equals 00:04
Run Code Online (Sandbox Code Playgroud)
第二个keydown没有做任何事情,因为它没有找到*:focus来将键路由到(尽管屏幕上有一个).混乱.
angular.scenario.dsl('keyboard', function() {
var chain = {};
chain.keydown = function(selector, keyEvent, keyCode, shift, ctrl) {
return this.addFutureAction("keyEvent", function($window, $document, done) {
var jQuery = $window.$;
var e = jQuery.Event(keyEvent);
e.keyCode = keyCode; // # Some key code value
e.altKey = false;
e.ctrlKey = ctrl;
e.shiftKey = shift;
if (selector == null) selector = '*:focus';
var j = …Run Code Online (Sandbox Code Playgroud) Testacular(现在是Karma)非常棒,角度场景也是如此.然而,将它们结合使用证明是一项挑战.在Testacular中有一个ANGULAR-SCENARIO-ADAPTER,但它打破了简单的测试.如果你自己包含angular-scenario.js,那么Testacular根本就不会运行任何测试.有人有这个正常运行?
我试过用一个微不足道的测试,但我看到了一些奇怪的行为:
测试:
describe('Simple', function(){
it('should compare strings', function(){
expect('foo').toBe('foo');
});
});
Run Code Online (Sandbox Code Playgroud)
配置的正常行为:
files = [
JASMINE,
JASMINE_ADAPTER,
// ANGULAR_SCENARIO,
// ANGULAR_SCENARIO_ADAPTER,
'tests/lib/angular/angular.js',
'tests/sample.js'
];
Run Code Online (Sandbox Code Playgroud)
输出:
$ testacular start
info: Testacular server started at http://localhost:9876/
info (launcher): Starting browser ChromeCanary
info (Chrome 25.0): Connected on socket id KRwEUtKtiaJs3MoiEsNg
Chrome 25.0: Executed 1 of 1 SUCCESS (0.061 secs / 0.003 secs)
Run Code Online (Sandbox Code Playgroud)
添加ANGULAR适配器配置时:
files = [
JASMINE,
JASMINE_ADAPTER,
ANGULAR_SCENARIO,
ANGULAR_SCENARIO_ADAPTER,
'tests/lib/angular/angular.js',
'tests/sample.js'
];
Run Code Online (Sandbox Code Playgroud)
输出是:
$ testacular start
info: Testacular server started …Run Code Online (Sandbox Code Playgroud) 当角度应用程序准备就绪时,Angular-scenario可以很好地工作.使用requirejs或其他AMD lib时不是这种情况.如何在角度场景中添加对AMD的支持?
我目前正试图弄清楚是否有办法做一个简单的未来/过去比较前.
1)通过获取列表长度来检查列表状态2)执行如果成功递增列表的动作3)将当前列表长度与过去进行比较.
但期货的概念似乎妨碍了我.人们会认为这是一个非常正常的用例.
问:在Angularjs场景中,您将如何处理过去/未来的比较?
我正在开发一个基于TDD的应用程序.
对于服务器端来说一切都很好,因为Python测试运行器很棒.
对于JS,我开始使用mocha也很棒.
我用Karma和Angular Scenario Runner编写了我的第一个测试,它也很棒.
问题是,在现实生活中开始使用Angular Scenario Runner后不久,我最终进行了60次e2s测试.运行所有测试需要1分钟.
现在,当我写一个新测试时,每次我想检查测试时,我都要等待60秒.
在Mocka中,有一个选项,只能使用.visionly运行特定的测试http://visionmedia.github.io/mocha/#exclusive-tests
看起来像Angular Scenario Runner被简要记录,但不知何故模仿Jasmine.
查看Angular Scenario Runner代码我只能找到xit定义,用于跳过测试.
是否有一个技巧要求Angular Scenario Runner仅运行测试的子集?
我已经实现了一个xdescribe空白方法来跳过整个套件......但从长远来看这是可行的.
非常感谢!
我抓住了Angular Seed项目并修改了它的场景测试.我正在尝试一个非常简单的测试,所以我相信这是我所缺少的.这是DSL和Scenario规范:
angular.scenario.dsl('customDsl', function() {
return function(selector) {
return this.addFutureAction('customDsl', function ($window, $document, done) {
done(null, selector + ' is ok!');
});
};
});
describe('my app', function() {
it('should pass', function() {
expect(customDsl('test')).toBe('test is ok!');
});
});
Run Code Online (Sandbox Code Playgroud)
运行测试时,它失败并显示以下消息:
Frame window is not accessible.
Run Code Online (Sandbox Code Playgroud)
我正在使用Windows 7并在Chrome中运行方案.要运行测试,我启动服务器node scripts\web-server.js,然后scripts\e2e-test.bat.