Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS karma/jasmine测试导致测试文件之间发生冲突_Javascript_Angularjs_Automated Tests_Integration Testing_Karma Jasmine - Fatal编程技术网

Javascript AngularJS karma/jasmine测试导致测试文件之间发生冲突

Javascript AngularJS karma/jasmine测试导致测试文件之间发生冲突,javascript,angularjs,automated-tests,integration-testing,karma-jasmine,Javascript,Angularjs,Automated Tests,Integration Testing,Karma Jasmine,我在中途测试时遇到了问题。集成测试,这意味着它们介于单元测试和E2E测试之间 我的构建是AngularJS和RequireJS,在Karma中需要使用RequireJS插件来运行测试。实际上,我正在使用一个名为AngularAMD的插件,使它们能够协同工作。因此,当我运行测试时,首先必须执行一个引导文件,以确保Angular应用程序已初始化,然后才能针对该应用程序运行测试 因为它们是集成测试,所以它们检查服务是否与真正的http请求连接,以及转换是否正在进行,即,注销的用户现在是否已登录。因此,

我在中途测试时遇到了问题。集成测试,这意味着它们介于单元测试和E2E测试之间

我的构建是AngularJS和RequireJS,在Karma中需要使用RequireJS插件来运行测试。实际上,我正在使用一个名为AngularAMD的插件,使它们能够协同工作。因此,当我运行测试时,首先必须执行一个引导文件,以确保Angular应用程序已初始化,然后才能针对该应用程序运行测试

因为它们是集成测试,所以它们检查服务是否与真正的http请求连接,以及转换是否正在进行,即,注销的用户现在是否已登录。因此,这些是异步测试,需要时间来接收响应

我的问题-Karma/Jasmine似乎在开始时只引导angular应用程序一次,然后每个测试在运行其测试时似乎都在使用此实例。因此,如果有一个服务在两个测试中使用,并且具有持久缓存状态,即用户已登录,则每个测试都从相同的状态中提取

例如,我有一个集成测试需要一个用户注销,另一个集成测试需要一个用户登录,所以每个测试都会相互干扰

是否有可能以某种方式设置Karma/Jasmine,每个测试文件将引导它自己的AngularJS实例进行测试?我正试图找出如何做到这一点,但我认为这可能是不可能的,除非我强迫Karma/Jasmine一次运行一个测试


想法?

您可以为您的环境设置进行定义。根据您在测试文件之间的作用域,您可能必须在每个文件中重新定义beforeX方法,但这会让您在每次测试之前找到一个干净的应用程序。

这并不能解决使用Angular和RequireJS时的问题,因为文件之间的状态是持久的。如果一个测试文件注入UserService angular服务并登录用户,那么当另一个测试文件也注入此服务时,即使此测试需要用户注销,用户也将登录。因此,如果此测试注销了用户,则另一个测试文件的测试将开始失败,因为用户不再处于所需的登录状态。实际上,我认为我发现,由于我在执行异步调用,集成测试使用等待响应的API请求,因为我在jasmine中使用done方法来实现这些功能,结果实际上是,每个集成测试都是一个接一个地启动的,而不是同时启动的,所以看起来问题已经解决了。如果我从测试用例的“it”块初始化控制器的一个变量,并尝试在另一个“it”块中读取该变量,那么它就不会出现在那里。有什么原因吗?