我有很多麻煩得到一個簡單的笑話測試工作。笑話堅持說我的Ajax調用沒有發生,並顯示錯誤消息:JestJs認爲阿賈克斯不叫
FAIL authTest.js (1.828s)
● Authentication: Logging In › it Doesn't currently have a logged in user
- Expected Function to be called with { url : 'api/loggedin', type : 'GET', error : <jasmine.any(function Function() { [native code] })>, success : <jasmine.any(function Function() { [native code] })> }.
at Spec.<anonymous> (/Users/ritmatter/reps/spec/authTest.js:13:20)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
的代碼被測試是在一個名爲auth.jsx文件,它看起來像這樣:
loggedIn: function() {
return $.ajax({
url: 'api/loggedin',
type: 'GET',
error: function(xhr, status, err) {
return false;
}.bind(this),
success: function(data) {
return true;
}.bind(this),
});
},
測試看起來像這樣:
/** @jsx React.DOM */
"use strict";
var React = require('react/addons');
var TestUtils = React.addons.TestUtils;
describe('Authentication: Logging In', function() {
it('Doesn\'t currently have a logged in user', function() {
var $ = require('jquery');
jest.dontMock('../js/auth.jsx');
var auth = require('../js/auth.jsx');
auth.loggedIn();
expect($.ajax).toBeCalledWith({
url: 'api/loggedin',
type: 'GET',
error: jasmine.any(Function),
success: jasmine.any(Function)
});
});
});
任何想法爲什麼開玩笑會認爲這沒有被調用?我一直在環顧四周,似乎有一些關於dontMock()和mock()的錯誤。
您不能從反應組件外部調用react組件方法,除非它們位於'statics:{}'對象中。儘管靜態方法不能訪問組件的實例。 – 2014-10-07 09:07:03
Auth是一個普通的javascript對象,而不是一個反應組件,所以我不認爲這應該是一個問題。該文件在此處緊密模擬教程:http://facebook.github.io/jest/docs/tutorial.html#content,但auth是.jsx文件而不是.js文件。 – ritmatter 2014-10-07 14:40:01
是的,它是一個.jsx文件令人困惑,因爲爲什麼一個無反應的組件類方法會在.jsx而不是.js中? – 2014-10-07 15:51:18