Javascript 让angular和intern.io一起工作
我正在尝试设置Intern.io,以便测试我的angular应用程序。我也在使用Grunt和Bower。我只是想得到一个自动运行测试的裸体观察任务。我尝试运行测试时遇到的问题是收到以下错误消息:Javascript 让angular和intern.io一起工作,javascript,angularjs,gruntjs,bower,intern,Javascript,Angularjs,Gruntjs,Bower,Intern,我正在尝试设置Intern.io,以便测试我的angular应用程序。我也在使用Grunt和Bower。我只是想得到一个自动运行测试的裸体观察任务。我尝试运行测试时遇到的问题是收到以下错误消息: Running "intern:app" (intern) task ReferenceError: window is not defined at /Users/evanvandegriff/Documents/work/nomi_v2/nomi_v2/web/vendor/src/angu
Running "intern:app" (intern) task
ReferenceError: window is not defined
at /Users/evanvandegriff/Documents/work/nomi_v2/nomi_v2/web/vendor/src/angular/angular.js:19288:3
at Function.vm.runInThisContext (/Users/evanvandegriff/Documents/work/nomi_v2/nomi_v2/web/node_modules/intern/node_modules/istanbul/lib/hook.js:163:16)
at /Users/evanvandegriff/Documents/work/nomi_v2/nomi_v2/web/node_modules/intern/node_modules/dojo/dojo.js:760:8
at fs.js:271:14
at Object.oncomplete (fs.js:107:15)
Warning: ReferenceError: window is not defined
at /Users/evanvandegriff/Documents/work/nomi_v2/nomi_v2/web/vendor/src/angular/angular.js:19288:3
at Function.vm.runInThisContext (/Users/evanvandegriff/Documents/work/nomi_v2/nomi_v2/web/node_modules/intern/node_modules/istanbul/lib/hook.js:163:16)
at /Users/evanvandegriff/Documents/work/nomi_v2/nomi_v2/web/node_modules/intern/node_modules/dojo/dojo.js:760:8
at fs.js:271:14
at Object.oncomplete (fs.js:107:15) Use --force to continue.
我的app.js看起来像:
angular.module( 'ngNomi', [
])
.config( function myAppConfig () {
})
.run( function run () {
})
.controller( 'AppCtrl', function AppCtrl ( $scope, $location ) {
});
这是我的intern.js文件:
// Learn more about configuring this file at <https://github.com/theintern/intern/wiki/Configuring-Intern>.
// These default settings work OK for most people. The options that *must* be changed below are the
// packages, suites, excludeInstrumentation, and (if you want functional tests) functionalSuites.
define({
// The port on which the instrumenting proxy will listen
proxyPort: 9000,
// A fully qualified URL to the Intern proxy
proxyUrl: 'http://localhost:9000/',
// Default desired capabilities for all environments. Individual capabilities can be overridden by any of the
// specified browser environments in the `environments` array below as well. See
// https://code.google.com/p/selenium/wiki/DesiredCapabilities for standard Selenium capabilities and
// https://saucelabs.com/docs/additional-config#desired-capabilities for Sauce Labs capabilities.
// Note that the `build` capability will be filled in with the current commit ID from the Travis CI environment
// automatically
capabilities: {
'selenium-version': '2.41.0'
},
// Browsers to run integration testing against. Note that version numbers must be strings if used with Sauce
// OnDemand. Options that will be permutated are browserName, version, platform, and platformVersion; any other
// capabilities options specified for an environment will be copied as-is
environments: [
{ browserName: 'internet explorer', version: '11', platform: 'Windows 8.1' },
{ browserName: 'internet explorer', version: '10', platform: 'Windows 8' },
{ browserName: 'internet explorer', version: '9', platform: 'Windows 7' },
{ browserName: 'firefox', version: '28', platform: [ 'OS X 10.9', 'Windows 7', 'Linux' ] },
{ browserName: 'chrome', version: '34', platform: [ 'OS X 10.9', 'Windows 7', 'Linux' ] },
{ browserName: 'safari', version: '6', platform: 'OS X 10.8' },
{ browserName: 'safari', version: '7', platform: 'OS X 10.9' }
],
// Maximum number of simultaneous integration tests that should be executed on the remote WebDriver service
maxConcurrency: 3,
// Name of the tunnel class to use for WebDriver tests
tunnel: 'SauceLabsTunnel',
// The desired AMD loader to use when running unit tests (client.html/client.js). Omit to use the default Dojo
// loader
// useLoader: {
// 'host-node': 'dojo/dojo',
// 'host-browser': 'node_modules/dojo/dojo.js'
// },
// Configuration options for the module loader; any AMD configuration options supported by the specified AMD loader
// can be used here
loader: {
packages: [
{ name: 'angular', location: 'vendor/src/angular/angular' },
{ name: 'angular-mocks', location: 'vendor/src/angular/angular-mocks' }
]
},
// Non-functional test suite(s) to run in each browser
suites: [ 'src/app.test.js' ],
// Functional test suite(s) to run in each browser once non-functional tests are completed
functionalSuites: [ /* 'myPackage/tests/functional' */ ],
// A regular expression matching URLs to files that should not be included in code coverage analysis
excludeInstrumentation: /^node_modules/
});
基本上,在运行测试时如何在该文件中定义窗口?我认为这是一个intern.js如何看待测试环境的期望问题。Angular在浏览器上下文中运行,因此它需要一个全局窗口。第24699行的主iffe不显示窗口。我们必须使用intern runner而不是intern client,这样才能驱动具有窗口上下文的浏览器 但你可能想无头快速奔跑,就像因果报应的例子所显示的那样。因此,我们只需将intern.js配置为在引擎盖下使用phantomjs来使用intern runner运行单元测试。它是实习生世界中的套件单元测试,必须在浏览器上下文中运行,如phantomjs。这对需要在浏览器中快速启动测试,但不想在桌面操作系统中启动浏览器的开发人员来说是件好事。您需要运行selenium服务器来驱动phantom。因此: 一,。独立运行selenium服务器,我使用:local。在一个单独的cmd控制台中启动 硒独立启动 二,。npm安装phantomjs 三,。在intern配置文件中,执行以下操作:
environments: [
{ browserName: 'phantomjs' }
],
loader: {
// Packages that should be registered with the loader in each testing environment
packages: [
{ name: 'angular', location: 'bower_components/angular' },
{ name: 'angular-mocks', location: 'bower_components/angular-mocks' }
]
},
四,。运行$node node\u modules\intern\bin\intern runner config=your/config suites=angular test
你将是金色的
这是我的小步单元测试,证明了角载荷。从那里,你可以做任何你想做的有角度的模仿,或任何事情
define([
'intern/chai!expect',
'intern!bdd',
'intern/order!angular/angular'
], function (expect, bdd) {
function inject (fn) {
return function() {
angular.injector(['ng']).invoke(fn);
}
}
bdd.describe('Scope Test', function () {
var ctrl, scope;
bdd.beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
}));
bdd.it('should have an angular object', function () {
expect(angular).to.be.an('object');
});
});
});
第24699行清楚地显示:}窗口,文档;所以它期望一个窗口上下文发送到iffy中,而node.js上下文中没有窗口@Evan@csnover你能评论一下吗?你的想法是对的。如果测试需要浏览器环境窗口、文档等,Node.js客户端intern客户端将无法工作。使用浏览器client.html或intern runner在浏览器中运行测试。鉴于原始海报使用的是grunt,intern runner是一个不错的选择。感谢httpete和@jason0x43的帮助。当我运行数字4时,我得到以下错误:在0.0.0.0:9000启动隧道上侦听。。。错误:[连接后ECONREFUNCE错误:对象处ERRNOEException处的connect ECONREFUNCE。连接后[as oncomplete]总计:测试了0个平台,0/0测试失败;发生了致命错误EverMind获得了它只需npm安装selenium server是的,需要记住的重要细节是,当您需要驱动浏览器时,甚至是无头webkit phantomjs,您需要selenium server。这仅适用于本地开发人员,稍后您可以针对Sauce或您自己的自制网格运行它。